كيفية تعلم برمجة جافا - دليل كامل. تقنيات جافا، SOA وخدمات الويب

14.04.2019

إرسال عملك الجيد في قاعدة المعرفة أمر بسيط. استخدم النموذج أدناه

سيكون الطلاب وطلاب الدراسات العليا والعلماء الشباب الذين يستخدمون قاعدة المعرفة في دراساتهم وعملهم ممتنين جدًا لك.

تم النشر على http://www.allbest.ru/

جامعة نيجني نوفغورود التقنية الحكومية

معهد الإلكترونيات الراديوية وتكنولوجيا المعلومات

قسم المعلوماتية ونظم التحكم

طرق ووسائل حماية المعلومات الحاسوبية

"نظام جافا الأمني"

نيجني نوفغورود، 2007

1. كيف تعمل جافا

2. حماية تطبيقات جافا

3. نموذج الأمان JDK1.2

4. هندسة جافا التشفيرية

5. التنظيم الموضوعي للآليات الأمنية

فهرس

1. مبدأ التشغيلجافا

تعتمد تقنية Java على نموذج خادم العميل، ويتكون برنامج Java من عدة كتل، تؤدي كل منها جزءًا محددًا من المهمة الإجمالية. من ناحية العميل، لا توجد سوى تلك الكتل المطلوبة في الوقت الحالي. علاوة على ذلك، يتم تخزين الكتل الأكثر استخدامًا في ذاكرة التخزين المؤقت على القرص الصلب أو في ذاكرة الوصول العشوائي (RAM) لجهاز الكمبيوتر الخاص بالمستخدم. وبما أن الكتلة يتم تحميلها من الخادم، فيمكن إدارة هذا النظام من الخادم، أي مركزيًا. وهذا يضمن أيضًا أن المستخدم يستخدم دائمًا أحدث إصدار من البرنامج.

المكون الرئيسي لهذه التقنية هو معالج Java الافتراضي، وهو عبارة عن بيئة لتنفيذ أوامر Java، أو ما يسمى bytecodes. يجب أن يتوافق أي برنامج Java مع مواصفات معالج Java الظاهري، والتي تحدد بشكل كامل مجموعة تعليمات Java، وأنواع البيانات التي يعالجها معالج Java، وسجلاتها.

بالإضافة إلى المعالج الافتراضي، تتضمن تقنية Java (كعنصر اختياري) لغة برمجة موجهة للكائنات تعتمد على لغة C++، والتي أضيفت إليها آليات جديدة للأمان والحوسبة الموزعة.

ميزة خاصة لجافا هي التطبيقات الصغيرة. التطبيق الصغير هو برنامج صغير يجب أن يتم فيه تحديد العديد من الوظائف المطلوبة. يتم تنزيل التطبيق الصغير عبر الشبكة ويمكن تنفيذه في مستعرض ويب يدعم لغة Java. هذا الجزء من تقنية Java مخصص للاستخدام على الإنترنت، وبالتالي يجب أن تمتد الحماية إلى التطبيق الصغير نفسه وإلى عميل الشبكة الذي يستخدم هذا التطبيق الصغير.

2. الحمايةجافا-التطبيقات

العنصر الأكثر ضعفًا في تقنية Java من الناحية الأمنية هو التطبيقات الصغيرة، حيث يمكن لأي عميل استخدامها. ولهذا السبب يتم توفير أساليب الحماية الأكثر صرامة للتطبيقات الصغيرة. على الرغم من أن المتصفحات المختلفة وعارضي التطبيقات الصغيرة قد يكون لديهم طرق مختلفة لحماية معلومات المستخدم من الهجوم، إلا أنه بشكل عام يجب منع التطبيق الصغير مما يلي:

· التحقق من وجود ومعلمات ملف معين.

· الوصول إلى جهاز كمبيوتر بعيد عبر الشبكة.

· الحصول على قائمة بجلسات اتصال الشبكة التي يقوم الكمبيوتر المحلي بإنشائها مع أجهزة الكمبيوتر الأخرى؛

· الحصول على معلومات حول المستخدم أو الدليل الرئيسي الخاص به.

الخروج من مترجم جافا.

يتم توفير هذه القواعد من خلال المكونات التالية لتقنية Java.

· معالج Java الظاهري الفعلي، الذي يراقب حالته باستمرار.

· برنامج صغير وجافا محمل البرنامج الذي يتحكم في الرموز التي تم تنزيلها.

· مدير الأمن (SecurityManager)، الذي يتحكم ويمنع الإجراءات الخطيرة للتطبيقات الصغيرة.

تسرد فئة SecurityManager الطرق التي يستخدمها النظام للتحكم في إجراءات التطبيق الصغير اعتمادًا على خصائص البيئة

تتمثل وظيفة المُحمل في التحقق من الرموز الثانوية، أي التحقق من صحة عنصر برنامج Java المستلم وسلامته. أثناء عملية التحقق، تم الكشف عن ما يلي:

· هل يتوافق إصدار الكتلة المستلمة مع إصدارات العناصر الأخرى للنظام؛

· ما إذا كان البرنامج يتوافق مع مواصفات معالج Java افتراضي معين؛

تتمثل أغراض هذا الفحص في تحديد الاستخدام غير الصحيح للعنونة غير المباشرة التي قد تؤدي إلى تعطيل المعالج الظاهري، والتحقق من سلامة التطبيق الصغير.

إن آليات الحماية لهذه التكنولوجيا مدروسة جيدا، لكن تنفيذها لا يزال بعيدا عن الكمال. لذلك، فيما يلي قائمة صغيرة من "الهجمات" المحتملة.

حظر الخدمة

ونتيجة لذلك، يتم حظر عمل المستخدم جزئيًا أو كليًا وقد يتم تعطيل المتصفح. فيما يلي قائمة بعيدة عن أن تكون كاملة من الخيارات المحتملة لمثل هذا "الهجوم":

· ملء كافة الذاكرة الحرة.

· التقاط فئات النظام الهامة.

القنوات "السرية".

تتيح لك هذه القنوات تلقي المعلومات حتى من خلال أنظمة الأمان (جدران الحماية). إن وجود قنوات "سرية" في المتصفح يجعل الأمر خطيرًا للغاية. يمكن استخدام إجراءات التطبيق الصغير التالية كقناة "سرية":

· إرسال البريد من خلال منفذ SMTP الخاص بالخادم (ويُرسل البريد نيابةً عن المستخدم الذي يعمل مع التطبيق الصغير)؛

· طلب بحث عن عنوان URL غير موجود، حيث يتم تمرير البيانات اللازمة لـ "برنامج الاختراق" كمعلمات؛

· محاولة الوصول إلى عنوان غير موجود (قد يحتوي تسلسل الأدلة على البيانات الضرورية).

المعلومات المعروفة للتطبيقات

باستخدام هذه المعلومات، يمكنك الحصول على بعض المعلومات التي يمكن استخدامها لاحقًا للقرصنة. يمكن أيضًا نقل هذه المعلومات عبر جدران الحماية باستخدام القنوات السرية الموضحة أعلاه. تعرف التطبيقات الصغيرة عادةً معلومات النظام التالية:

· وقت النظام.

· اسم وإصدار نظام التشغيل.

· بنية المعالج.

يعد تحقيق التوازن بين إمكانيات التطبيقات القابلة للتنزيل وحماية نظام العميل أمرًا صعبًا للغاية. لا يمكن جعل الحلول المقترحة مستقلة عن منصة معينة، الأمر الذي يتعارض مع متطلبات قابلية النقل المطلقة لبرامج Java.

3. النموذج الأمنيJDK1.2

توفر تقنية Java عددًا من حواجز الحماية، والتي يمكن تقسيمها إلى ثلاث مجموعات:

· موثوقية اللغة.

· التحكم عند استقبال وتحميل البرامج.

· التحكم أثناء تنفيذ البرنامج.

توفر Java الأمان من خلال عناصر التحكم الثابتة والديناميكية. ميزة Java الأخرى هي الإدارة التلقائية للذاكرة، مما يزيل ظهور المؤشرات المتدلية.

التحكم عند استلام وتحميل البرامج في Java هو متعدد المراحل بطبيعته. أولاً، يمكن تزويد مكونات البرامج بتوقيع إلكتروني، مما يجعل من الممكن التحكم في سلامتها وأصالتها. ثانيًا، يحاول أداة التحقق من الرمز الثانوي، بالإضافة إلى الفحص العام لتنسيق المعلومات المستلمة، التأكد من عدم وجود الإجراءات غير الصحيحة التالية:

· تزوير المؤشر (على سبيل المثال، الحصول على مؤشر نتيجة عملية حسابية)؛

· انتهاك حقوق الوصول إلى مكونات الفصل.

· استدعاء أساليب الكائن مع مجموعة غير صالحة من المعلمات.

· تحويل نوع غير صالح.

تجاوز سعة المكدس أو استنفاده.

يمكن تقسيم التحكم أثناء تنفيذ البرنامج إلى مستويين. في المستوى الأدنى، لا يسمح جهاز Java الظاهري بتجاوز المصفوفة أو الإجراءات غير الصحيحة المشابهة. في المستوى الأعلى، يقوم مدير الأمن بإجراء عمليات فحص الوصول ذات مغزى، وبالتالي تنفيذ سياسة الأمان المحددة.

إذا واصلنا التقسيم إلى مجموعات ومستويات، فمن المفيد تسليط الضوء على الجانبين التاليين لأمن Java:

· حماية بيئة تشغيل Java وموارد الأنظمة الأساسية للأجهزة والبرامج من البرامج الضارة؛

· تقييد وصول الأشخاص إلى الموارد على مستوى التطبيق.

الغرض الرئيسي من التدابير الأمنية في Java هو حماية بيئة Java من البرامج الضارة. ولتحقيق هذا الهدف تم اقتراح مفهوم الصندوق الرملي ( رمل) هي بيئة مغلقة يتم فيها تنفيذ برامج غير جديرة بالثقة. تم اعتبار هذه تطبيقات صغيرة تم استلامها عبر الشبكة. تم اعتبار جميع التعليمات البرمجية "الأصلية" (أي البرامج الموجودة على الكمبيوتر المحلي) موثوقة تمامًا وكان كل ما هو متاح لجهاز Java الظاهري متاحًا لها.

تتضمن القيود التي يفرضها وضع الحماية حظرًا على الوصول إلى نظام الملفات المحلي، واتصالات الشبكة مع جميع المضيفين باستثناء مصدر التطبيق الصغير (المضيف الذي تم استلام التطبيق الصغير منه)، وما إلى ذلك. مع مثل هذه القيود، يتم ضمان الأمان بشكل عام، لكن التطبيقات الصغيرة ليس لديها القدرة على العمل تقريبًا.

للتعامل بطريقة أو بأخرى مع هذه المشكلة، قدموا مفهوم التوقيع الإلكتروني، الذي وضعه موزع التطبيق الصغير. تقوم آلة Java، وفقًا لسياستها الأمنية، بتقسيم الموزعين، وبالتالي تطبيقاتهم الصغيرة، إلى فئتين - موثوقة وغير موثوقة. تم منح التطبيقات الموثوقة نفس الحقوق التي يتمتع بها الكود الأصلي.

ظهرت ثلاثة مفاهيم رئيسية:

· مصدر البرنامج .

· القانون والعديد من الحقوق؛

· السياسة الأمنية.

يتم تحديد مصدر البرنامج من خلال زوج (محدد موقع الموارد الموحد - URL، موزعو البرنامج). يمكن أن يشير عنوان URL إلى ملف موجود على نظام الملفات المحلي أو إلى مورد موجود على نظام بعيد.

الحق هو مفهوم مجرد، كما هو معتاد في Java، هناك فئات وكائنات. في معظم الحالات، يتم تحديد الحق من خلال سلسلتين من الأحرف - اسم المورد والإجراء. على سبيل المثال، يمكن أن يكون الملف موردًا، ويمكن أن تكون القراءة إجراءً.

تحدد سياسة الأمان المراسلات بين المصدر وحقوق البرامج الواردة منه. لا تتمتع البرامج "الأصلية" بأي امتيازات أمنية ويمكن أن تكون السياسة تجاهها أي شيء.

في جوهرها، هناك آلية حقوق الوصول التقليدية لأنظمة التشغيل الحديثة وأنظمة إدارة قواعد البيانات مع الميزات التالية:

· موضوع الوصول ليس المستخدم، بل مصدر البرنامج. ومع ذلك، يمكننا أن نفترض رسميًا أنه أثناء تنفيذ البرنامج يصبح مصدره؛

· لا يوجد مفهوم لمالك المورد الذي (المالك) يمكنه تغيير الحقوق؛ يتم تحديد الأخير حصريًا بواسطة السياسة الأمنية.

نموذج الأمان في JDK 1.2

4. هندسة التشفيرجافا

بدون التشفير، تصبح المصادقة الموثوقة ومراقبة النزاهة والسرية مستحيلة.

تم تصميم Java Cryptography Architecture (JCA) لتوفير الخدمات التالية:

· تحديد/التحقق من التوقيع الإلكتروني.

· حساب دالة التجزئة.

· توليد أزواج المفاتيح العامة/السرية.

· إنشاء شهادات تؤكد صحة المفاتيح العامة.

· تخزين المفاتيح، وكذلك شهادات الشركاء الموثوقين؛

· تحويل المفاتيح من تمثيل ذو بنية مخفية إلى تمثيل مفهوم بشكل عام والعكس صحيح.

· توليد معلمات خوارزميات التشفير.

· توليد أرقام عشوائية (زائفة).

· التشفير المتماثل.

· تطوير المواد الأساسية المشتركة.

بالإضافة إلى ذلك، يجب أن تلبي بنية التشفير المتطلبات التكنولوجية التالية:

· ضمان الاستقلال عن الخوارزميات وتطبيقاتها؛

· ضمان التوافق المتبادل لعمليات التنفيذ.

· ضمان قابلية توسيع مجموعة الخوارزميات وتطبيقاتها.

يمكن تقديم كل خدمة من خلال عدة خوارزميات، كل منها، بدورها، يمكن أن يكون لها العديد من التطبيقات. على سبيل المثال، تهدف خوارزميات MD5/SHA-1 (وكذلك "وظيفة التجزئة" الروسية GOST) إلى حساب وظيفة التجزئة؛ وخوارزميات RSA/DSA و"إجراءات GOST الروسية لتطوير التوقيعات الرقمية الإلكترونية والتحقق منها". " تُستخدم لإنشاء التوقيع الإلكتروني والتحقق منه وما إلى ذلك.

تم تصميم واجهة البرنامج للخدمات لتعكس وظائفها في شكل مستقل عن الخوارزمية. للإشارة إلى التطبيقات، يتم استخدام مفهوم مزود خدمة التشفير - حزمة أو مجموعة من الحزم التي تحتوي على التنفيذ. يتمتع التطبيق بالقدرة على اختيار الخوارزميات ومقدمي الخدمات من بين المتاحين.

يخضع العنصران الأخيران في قائمة الخدمات (التشفير المتماثل وإنشاء مادة رئيسية مشتركة) لقيود التصدير الأمريكية، لذلك، على عكس الخدمات الأخرى المدرجة، يتم تجميعهما كملحق (Java Cryptography Extension، JCE)، وهو منتج منفصل.

التسلسل الهرمي لخدمات التشفير والخوارزميات والتطبيقات

5. تنظيم الكائنإضفاء الطابع الرسمي على الآليات الأمنية

تشفير أمان تطبيق Java الصغير

يتم تجميع آليات الأمان في JDK 1.2 في أربع حزم أساسية وثلاث حزم ملحقة. وهنا بعض منهم

· java.security- يحتوي على الواجهات والفئات التي تشكل إطار آليات الأمان. يتضمن ذلك أدوات التحكم في الوصول التي تمت مناقشتها أعلاه، بالإضافة إلى أدوات التشفير، مثل إنشاء توقيع إلكتروني، وحساب دالة التجزئة، وما إلى ذلك.

· java.security.interfaces- وسائل توليد مفاتيح RSA وDSA.

· javax.crypto- واجهة وفئات التشفير المتماثل.

تتركز الواجهات والفئات الأكثر أهمية من الناحية المفاهيمية في الحزمة java.security.

السياسة الأمنية

تنشئ سياسة الأمان مراسلات بين مصادر البرنامج وحقوق الوصول الخاصة بها. في جهاز Java، يتم تمثيله في أي وقت بواسطة كائن واحد من فئة يكون خليفة لفئة مجردة سياسة. طرق الصف سياسةتسمح لك بالحصول على/تعيين السياسة الحالية، بالإضافة إلى معرفة حقوق الوصول المرتبطة بمصدر برنامج معين.

التحقق من حقوق الوصول

للتحكم في حقوق الوصول، يمكنك استخدام أداتين:

· المدمج في مدير الأمن، ودعا AccessController;

· مدير الأمن المتغير ديناميكيًا - مدير الامن.

فصل AccessControllerيوفر طريقة واحدة للتحقق من حق معين في السياق الحالي - checkPermission.

واجهات وفئات التشفير

يعكس تنظيم الكائنات لنظام التشفير الفرعي Java بشكل طبيعي نظام التشفير الفرعي الموصوف أعلاه. تتوافق كل خدمة مع فئة مجردة تصف واجهة البرمجة (الخدمة) الخاصة بها، بالإضافة إلى فئة تصف واجهة البرمجة لمزود الخدمة. الفصول مهمة مزودو حماية. يحتوي الأول على طرق عامة لمقدمي خدمات التشفير، ويحتوي الثاني على طرق لإدارة مقدمي الخدمة ومعلمات الخوارزمية.

فهرس

1. http://www.jetinfo.ru/1998/11-12/1/article1.11-12.19981237.html

2. http://vestnik.sci.pfu.edu.ru/archiv-cs/articles-cs/2004-3-1/pdf/kulyabov-2004.pdf

3. http://ru.wikipedia.org/wiki/Java

4. http://infocity.kiev.ua/hack/content/hack081.phtml

5. http://citforum.uar.net/security/web/Java_seq.shtml

6. http://www.htc-cs.ru/press/tribune/java.html

7. http://www.ccc.ru/magazine/depot/00_11/print.html?web3.htm

تم النشر على موقع Allbest.ru

وثائق مماثلة

    بنية Java وJava RMI، خصائصهما الرئيسية ونظامهما الأساسي وعناصرهما. الأمن وجهاز جافا الظاهري. واجهة جافا API. مثال على استخدام تطبيق RMI. العمل مع برنامج "الآلة الحاسبة". تعدد الاستخدامات وإمكانية نقل المنصات.

    تمت إضافة الدورة التدريبية في 12/03/2013

    المفهوم والميزات الوظيفية لـ Java Card كإصدار من منصة Java للأجهزة ذات موارد الحوسبة المحدودة للغاية، وتقييم قدراتها والموارد المطلوبة. تحليل مستوى أمان المنصة وتفاعل المكونات.

    تمت إضافة العرض بتاريخ 19/05/2014

    قدرات الشبكة للغات البرمجة. فوائد استخدام تطبيقات جافا. الفصول المضمنة في مكتبة java.awt. إنشاء واجهة مستخدم. اتصال مأخذ التوصيل بالخادم. الرسومات في جافا. قيم مكونات اللون.

    تمت إضافة الدورة التدريبية في 11/10/2014

    تاريخ إنشاء لغة جافا. المبادئ الأساسية للبرمجة كائنية التوجه. البنية وميزات بناء الجملة وأمثلة على إمكانيات التطبيق لاستخدام لغة جافا ومزاياها. فرص العمل كمبرمج جافا.

    تمت إضافة الدورة التدريبية في 14/12/2012

    أساس واجهة المستخدم. ميزات فئات java.awt.geom وjava.awt وjava.awt.Graphics وjava.awt.Graphics2D. الأساسيات الرسومية الأساسية والعمل مع التدفقات. قائمة البرامج وتكوين التحولات التقاربية.

    دليل التدريب، تمت إضافته في 30/06/2009

    بنية مستوى قيادة منصة Java، تنسيق ملف فئة Java. مترجم لغة يشبه التجميع يسمح لك بإنشاء ملفات فئة تتم معالجتها بشكل صحيح بواسطة JVM الحقيقي، ويدعم جميع أوامر Java bytecode وأهم إمكانيات JVM.

    تمت إضافة الدورة التدريبية في 17/09/2008

    خلفية تاريخية مختصرة عن تطور لغة جافا. تحليل المجال. منصة جافا والإصدار المؤسسي والإصدار القياسي. تطبيقات صغيرة، servlets، تطبيقات واجهة المستخدم الرسومية. تطوير كود البرنامج، تطبيق وحدة التحكم. نتائج التطبيق الصغير، servlet.

    تمت إضافة الدورة التدريبية في 23/12/2015

    ميزة استخدام البرامج المكتوبة بلغة Java ومتطلباتها وإعداداتها على جهاز الكمبيوتر العميل. النشر والتحديث "التلقائي" اللاحق لإصدارات واجهة المستخدم الرسومية للعميل باستخدام تقنية Java Web Start في بيئة Windows.

    الملخص، تمت إضافته في 16/05/2011

    إنشاء لغة برمجة باستخدام تطبيق Java. تاريخ اسم جافا وشعارها. مراجعة لمجموعة متنوعة من محرري النصوص الحديثة. معالجة السلسلة. الأساليب في فئة السلسلة. جافا: مهام معالجة النص. أمثلة البرمجة.

    تمت إضافة الدورة التدريبية في 19/07/2014

    لغة ترميز XML القابلة للتوسيع. وصف نوع مستند DTD. أهمية XML ومنصة Java. نظرة عامة على موزعي DOM وSAX القياسيين. تقنية Java Servlet، صفحات خادم Java (JSP)، JavaBeans. الوظائف العامة لمنتج البرنامج. نموذج البيانات.

لذا، تتمتع Java بتاريخ طويل ومعقد من التطوير، ولكن حان الوقت للنظر في ما أنجزه المبدعون وما هي الخصائص التي تتمتع بها هذه التكنولوجيا.

الملكية الأكثر شهرة والأكثر إثارة للجدل في نفس الوقت هي الملكية المتعددة أو عبر منصة. وقد سبق أن قيل أن ذلك يتم تحقيقه من خلال استخدام الجهاز الظاهري JVM، وهو برنامج عادي ينفذه نظام التشغيل ويزود تطبيقات Java بجميع الإمكانيات اللازمة. نظرًا لأنه تم تحديد جميع معلمات JVM، فإن المهمة الوحيدة المتبقية هي تنفيذ الأجهزة الافتراضية على جميع الأنظمة الأساسية الموجودة والمستخدمة.

يحدد وجود الجهاز الظاهري العديد من خصائص Java، ولكن الآن دعونا نركز على السؤال التالي - هل Java لغة مترجمة أم مترجمة؟ في الواقع، يتم استخدام كلا النهجين.

يتم تمثيل الكود المصدري لأي برنامج بلغة Java بواسطة ملفات نصية عادية يمكن إنشاؤها في أي محرر نصوص أو أداة تطوير متخصصة ولها امتداد .java. يتم تغذية هذه الملفات إلى مدخلات مترجم Java، الذي يترجمها إلى رمز Java بايت خاص. إنها مجموعة التعليمات المدمجة والفعالة التي يدعمها JVM وهي جزء لا يتجزأ من نظام Java الأساسي.

يتم حفظ نتيجة عمل المترجم في ملفات ثنائية ذات ملحق .class. يتم توفير تطبيق Java الذي يتكون من هذه الملفات كمدخل إلى جهاز افتراضي، والذي يبدأ في تنفيذها أو تفسيرها، لأنه في حد ذاته برنامج.

انتقد العديد من المطورين في البداية بشدة شعار صن الجريء "اكتب مرة واحدة، وقم بالتشغيل في كل مكان"، ووجدوا المزيد والمزيد من التناقضات والتناقضات عبر الأنظمة الأساسية المختلفة. ومع ذلك، يجب الاعتراف بأنهم كانوا ببساطة غير صبورين. كانت Java قد ظهرت للتو، ولم تكن الإصدارات الأولى من المواصفات شاملة بما فيه الكفاية.

وسرعان ما أدركت صن أن مجرد نشر المواصفات بحرية (وهو ما تم القيام به بالفعل قبل وقت طويل من استخدام جافا) لم يكن كافيًا. من الضروري أيضًا إنشاء إجراءات خاصة لفحص المنتجات الجديدة للتأكد من مطابقتها للمعايير. احتوى أول اختبار من نوعه لـ JVM على حوالي 600 فحص فقط، وبعد مرور عام ارتفع عددها إلى عشرة آلاف وما زال يتزايد منذ ذلك الحين (وهذا هو بالضبط ما فشل MS IE 4.0 في اجتيازه). بالطبع، قام مؤلفو الأجهزة الافتراضية بتحسينها طوال الوقت، مما أدى إلى إزالة الأخطاء وتحسين عملها. ومع ذلك، فإن أي تقنية، حتى لو كانت مصممة بشكل جيد للغاية، تتطلب وقتًا لإنشاء تطبيق عالي الجودة. يمر Java 2 Micro Edition (J2ME) الآن بمسار تطوير مماثل، ولكن سنتحدث عن ذلك لاحقًا.

الخاصية التالية الأكثر أهمية هي اتجاه كائن Java، والذي يتم ذكره دائمًا في جميع المقالات والنشرات الصحفية. ستتم مناقشة النهج الموجه للكائنات (OOP) نفسه في المحاضرة التالية، ولكن من المهم التأكيد على أنه في Java يتم تنفيذ كل شيء تقريبًا في شكل كائنات - الخيوط وتدفقات البيانات، والعمل مع الشبكة، والعمل مع الصور، مع واجهة المستخدم ومعالجة الأخطاء وما إلى ذلك. بعد كل شيء، أي تطبيق Java هو مجموعة من الفئات التي تصف أنواعًا جديدة من الكائنات.

سيتم إجراء مناقشة تفصيلية لنموذج كائن Java طوال الدورة التدريبية، ولكننا سنحدد الميزات الرئيسية. بادئ ذي بدء، تخلى المبدعون عن الميراث المتعدد. تقرر أن هذا يجعل البرامج معقدة ومربكة للغاية. تستخدم اللغة أسلوبًا بديلاً - نوع خاص من "الواجهة". وسيتم مناقشتها بالتفصيل في المحاضرة المقابلة.

وعلاوة على ذلك، في جافا يتم استخدامه الكتابة القوية. هذا يعني أن أي متغير وأي تعبير له نوع معروف بالفعل في وقت الترجمة. يتم استخدام هذا الأسلوب لتبسيط عملية تحديد المشكلات، لأن المترجم يقوم على الفور بالإبلاغ عن الأخطاء ويشير إلى موقعها في الكود. سيتطلب البحث عن الاستثناءات (كما تسمى المواقف غير الصحيحة في Java) أثناء تنفيذ البرنامج (وقت التشغيل) اختبارات معقدة، ويمكن العثور على سبب الخلل في فئة مختلفة تمامًا. وبالتالي، تحتاج إلى بذل جهد إضافي عند كتابة التعليمات البرمجية، ولكن موثوقيتها تزيد بشكل كبير (وهذا هو أحد الأهداف الأساسية التي تم إنشاء اللغة الجديدة من أجلها).

لا يوجد سوى 8 أنواع بيانات في Java ليست كائنات. تم تعريفها من الإصدار الأول ولم تتغير أبدًا. هذه خمسة أنواع من الأعداد الصحيحة: بايت، وقصير، وint، وطويل، وتتضمن أيضًا الحرف char. ثم يطفو نوعان كسريان ويتضاعفان، وأخيرًا نوع منطقي. تسمى هذه الأنواع بالبسيطة، أو البدائية (من اللغة الإنجليزية البدائية)، ويتم مناقشتها بالتفصيل في محاضرة أنواع البيانات. جميع الأنواع الأخرى هي كائن أو مرجع. مرجع).

لسبب ما، أدى بناء جملة Java إلى إرباك العديد من الأشخاص. لقد تم إنشاؤه بالفعل على أساس بناء جملة لغات C/C++، لذلك إذا نظرت إلى الكود المصدري للبرامج المكتوبة بهذه اللغات وفي Java، فليس من الممكن على الفور فهم أي منها مكتوب بها اي لغة. لسبب ما، أعطى هذا العديد من الأشخاص سببًا للاعتقاد بأن Java هي لغة C++ مبسطة مع ميزات إضافية مثل أداة تجميع البيانات المهملة. سنلقي نظرة على أداة تجميع البيانات المهملة التلقائية أدناه، ولكن من المفاهيم الخاطئة الكبيرة الاعتقاد بأن Java هي نفس لغة C++.

بالطبع، عند تطوير تقنية جديدة، اعتمد مؤلفو Java على لغة برمجة مستخدمة على نطاق واسع لعدة أسباب. أولاً، في ذلك الوقت كانوا هم أنفسهم يعتبرون لغة C++ هي أداتهم الرئيسية. ثانيا، لماذا نخترع شيئا جديدا عندما يكون هناك قديم مناسب تماما؟ أخيرا، من الواضح أن بناء الجملة غير المألوف سوف يخيف المطورين وسيعقد بشكل كبير تنفيذ لغة جديدة، ولكن كان من المفترض أن تنتشر Java في أسرع وقت ممكن. لذلك، تم تبسيط بناء الجملة قليلاً فقط لتجنب الإنشاءات المربكة للغاية.

ولكن، كما ذكرنا سابقًا، لم يكن C++ مناسبًا بشكل أساسي للمهام الجديدة التي حددها مطورو Sun لأنفسهم، لذلك تم إنشاء نموذج Java من جديد، ووفقًا لأهداف مختلفة تمامًا. ستكشف المحاضرات الإضافية تدريجياً عن الاختلافات المحددة.

أما بالنسبة لنموذج الكائن، فقد تم تصميمه على غرار لغات مثل Smalltalk من IBM، أو لغة Simula التي تم تطويرها في الستينيات في مركز الحوسبة النرويجي، والتي يشير إليها مبتكر لغة Java، جيمس جوسلينج نفسه.

خاصية أخرى مهمة لـ Java - سهولة التعلم والتطوير - تلقت أيضًا مراجعات مختلطة. في الواقع، بذل المؤلفون عناء تخليص المبرمجين من الأخطاء الأكثر شيوعًا التي يرتكبها أحيانًا مطورو C/C++ ذوي الخبرة. والمركز الأول هنا يشغله العمل مع الذاكرة.

تم تقديم جافا منذ البداية آلية جمع القمامة التلقائية(من جامع القمامة الإنجليزي). لنفترض أن أحد البرامج يقوم بإنشاء كائن، ويعمل معه، ثم تأتي لحظة عندما لا تكون هناك حاجة إليه. من الضروري تحرير الذاكرة المشغولة حتى لا تتعارض مع الأداء الطبيعي لنظام التشغيل. في C/C++، يجب أن يتم ذلك بشكل صريح من البرنامج. من الواضح أنه مع هذا النهج هناك خطران - إما حذف كائن لا يزال بحاجة إليه شخص ما (وفي حالة الوصول إليه بالفعل سيحدث خطأ)، أو عدم حذف كائن أصبح غير ضروري، وهذا يعني تسرب الذاكرة أي أن البرنامج يبدأ في استهلاك كمية متزايدة من ذاكرة الوصول العشوائي (RAM).

عند التطوير في Java، لا يفكر المبرمج في تحرير الذاكرة على الإطلاق. يحسب الجهاز الظاهري نفسه عدد المراجع لكل كائن، وإذا أصبح صفرًا، فسيتم وضع علامة على هذا الكائن للمعالجة بواسطة أداة تجميع البيانات المهملة. وبالتالي، يجب على المبرمج التأكد فقط من عدم وجود إشارات إلى كائنات غير ضرورية. أداة تجميع البيانات المهملة عبارة عن مؤشر ترابط في الخلفية يبحث بانتظام في الكائنات الموجودة ويزيل تلك التي لم تعد هناك حاجة إليها. لا يمكن للبرنامج التأثير على تشغيل أداة تجميع البيانات المهملة بأي شكل من الأشكال؛ يمكنك فقط بدء المرور التالي بشكل صريح باستخدام وظيفة قياسية. ومن الواضح أن هذا يبسط إلى حد كبير تطوير البرامج، وخاصة بالنسبة للمبرمجين المبتدئين.

ومع ذلك، كان المطورون ذوو الخبرة غير راضين عن عدم قدرتهم على التحكم بشكل كامل في كل ما يحدث لنظامهم. لا توجد معلومات دقيقة متى سيتم حذف الكائن الذي أصبح غير ضروري، ومتى سيبدأ مؤشر ترابط أداة تجميع البيانات المهملة في العمل (وبالتالي احتلال موارد النظام)، وما إلى ذلك. ولكن، مع كل الاحترام الواجب لتجربة هؤلاء المبرمجين، تجدر الإشارة إلى أن العدد الهائل من حالات فشل البرامج المكتوبة بلغة C/C++ ترجع إلى العمل غير الصحيح مع الذاكرة، وأحيانًا يحدث هذا حتى مع المنتجات المستخدمة على نطاق واسع من منتجات خطيرة للغاية شركات.

بالإضافة إلى ذلك، تم التركيز بشكل خاص على سهولة إتقان التكنولوجيا الجديدة. كما ذكرنا سابقًا، كان من المتوقع (وكانت هذه التوقعات مبررة، مما يؤكد صحة المسار المختار!) أنه يجب استخدام Java على أوسع نطاق ممكن، حتى في تلك الشركات التي لم يسبق لها أن شاركت في البرمجة على هذا المستوى (الأجهزة المنزلية) مثل المحامص وآلات صنع القهوة وإنشاء الألعاب والتطبيقات الأخرى للهواتف المحمولة وغيرها). وكان هناك عدد من الاعتبارات الأخرى كذلك. يجب أن تكون المنتجات المخصصة للمستخدمين العاديين، وليس المبرمجين المحترفين، موثوقة بشكل خاص. أصبحت الإنترنت شبكة الويب العالمية بسبب ظهور مستخدمين غير محترفين، ولم تكن القدرة على إنشاء تطبيقات صغيرة لهم أقل جاذبية. لقد احتاجوا إلى أداة بسيطة لإنشاء تطبيقات قوية.

أخيرًا، اكتسب ازدهار الإنترنت في التسعينيات زخمًا وطرح متطلبات جديدة أكثر صرامة لوقت التطوير. لم تعد المشاريع متعددة السنوات، التي كانت شائعة في الماضي، تلبي احتياجات العملاء؛ كان لا بد من إنشاء أنظمة جديدة في مدة أقصاها عام، أو حتى في غضون أشهر.

بالإضافة إلى تقديم أداة تجميع البيانات المهملة، تم اتخاذ خطوات أخرى لتسهيل عملية التطوير. لقد تم ذكر بعضها بالفعل - القضاء على الميراث المتعدد، وتبسيط بناء الجملة، وما إلى ذلك. تم تنفيذ القدرة على إنشاء تطبيقات متعددة الخيوط في الإصدار الأول من Java (أظهرت الأبحاث أن هذا مناسب جدًا للمستخدمين، و تعتمد المعايير الحالية على أنظمة المبرقة الكاتبة التي عفا عليها الزمن منذ سنوات عديدة مضت). وغيرها من الميزات سيتم مناقشتها في المحاضرات القادمة. ومع ذلك، فقد كان من الحقائق المقبولة عمومًا منذ فترة طويلة أن إنشاء الأنظمة وصيانتها أسهل بالفعل في Java مقارنةً بـ C/C++. ومع ذلك، تم إنشاء هذه اللغات لأغراض مختلفة، ولكل منها مزاياها الخاصة التي لا يمكن إنكارها.

الخاصية المهمة التالية لـ Java هي الأمان. إن التركيز الأولي على التطبيقات الموزعة، وعلى وجه الخصوص قرار تشغيل التطبيقات الصغيرة على جهاز العميل، جعل مسألة الأمان أولوية قصوى. عند تشغيل أي جهاز Java افتراضي، هناك مجموعة كاملة من التدابير المتخذة. وفيما يلي مجرد وصف موجز لبعض منهم.

أولا، هذه هي قواعد العمل مع الذاكرة. لقد قيل بالفعل أن تنظيف الذاكرة يتم تلقائيًا. يتم تحديد حجزه أيضًا بواسطة JVM، وليس المترجم، أو يمكن للمطور فقط الإشارة إلى أنه يريد إنشاء كائن جديد آخر. لا توجد في الأساس أي علامات للعناوين الفعلية.

ثانيًا، إن وجود مترجم الآلة الافتراضية يجعل من السهل جدًا قطع التعليمات البرمجية الخطيرة في كل مرحلة من مراحل العمل. أولاً، يتم تحميل الرمز الثانوي إلى النظام، عادةً في شكل ملفات فئة. يتحقق JVM بعناية من أنهم جميعًا يتبعون قواعد أمان Java العامة وأنه لم يتم إنشاؤها بواسطة المهاجمين من خلال وسائل أخرى (أو إتلافها أثناء النقل). وبعد ذلك، أثناء تنفيذ البرنامج، يمكن للمترجم التحقق بسهولة من صحة كل إجراء. تختلف إمكانيات الفئات التي تم تحميلها من قرص محلي أو عبر الشبكة بشكل كبير (يمكن للمستخدم تعيين حقوق معينة أو إبطالها بسهولة). على سبيل المثال، لن تتمكن التطبيقات الصغيرة بشكل افتراضي من الوصول إلى نظام الملفات المحلي. تحتوي جميع مكتبات Java القياسية على مثل هذه القيود المضمنة.

وأخيرًا، هناك آلية لتوقيع التطبيقات الصغيرة والتطبيقات الأخرى التي يتم تنزيلها عبر الشبكة. تضمن الشهادة الخاصة حصول المستخدم على الرمز تمامًا بالشكل الذي أصدرته به الشركة المصنعة. هذا، بالطبع، لا يوفر حماية إضافية، ولكنه يسمح للعميل إما برفض العمل مع التطبيقات من الشركات المصنعة غير الموثوق بها، أو انظر على الفور إلى أنه تم إجراء تغييرات غير مصرح بها على البرنامج. وفي أسوأ الأحوال، فهو يعرف من المسؤول عن الضرر الذي حدث.

يتيح لنا الجمع بين خصائص Java الموصوفة التأكيد على أن اللغة مناسبة جدًا لتطوير تطبيقات الإنترنت والإنترانت (شبكات الشركات الداخلية).

أخيرًا، السمة المميزة المهمة لجافا هي ديناميكيتها. تم تصميم اللغة بشكل جيد للغاية، حيث يشارك في تطويرها مئات الآلاف من المطورين والعديد من الشركات الكبيرة. يتم تناول المراحل الرئيسية لهذا التطور بإيجاز في القسم التالي.

لذلك، دعونا نلخص. تتمتع منصة Java بالمزايا التالية:

  • قابلية النقل، أو عبر منصة ;
  • اتجاه الكائن، تم إنشاء نموذج كائن فعال؛
  • بناء جملة C/C++ المألوف؛
  • نموذج أمان مدمج وشفاف؛
  • التركيز على مهام الإنترنت، وتطبيقات الشبكة الموزعة؛
  • الديناميكية وسهولة التطوير وإضافة ميزات جديدة؛
  • سهولة التعلم.

ولكن لا ينبغي للمرء أن يفترض أن التعلم الأسهل يعني أنه ليست هناك حاجة لتعلم اللغة على الإطلاق. لكتابة برامج جيدة حقًا، لإنشاء أنظمة معقدة كبيرة، تحتاج إلى فهم واضح لجميع المفاهيم الأساسية لـ Java والمكتبات المستخدمة. وهذا هو بالضبط ما خصصت له هذه الدورة.

إصدارات ومنتجات جافا الرئيسية

دعونا نوضح على الفور أننا نعني بالمنتجات هنا الحلول البرمجية من شركة Sun، والتي تعتبر "تطبيقات مرجعية".

لذلك، تم الإعلان عن جافا لأول مرة في 23 مايو 1995. المنتجات الرئيسية المتاحة في ذلك الوقت في الإصدارات التجريبية كانت:

  • مواصفات لغة جافا, JLS , مواصفات لغة جافا (وصف المفردات، وأنواع البيانات، والبنيات الأساسية، وما إلى ذلك)؛
  • مواصفات JVM؛
  • Java Development Kit، JDK - أداة مطور تتكون أساسًا من أدوات مساعدة ومكتبات فئة قياسية وعروض توضيحية.

تم تجميع مواصفات اللغة بنجاح كبير بحيث يتم استخدامها دون تغيير عمليًا حتى يومنا هذا. وبطبيعة الحال، تم تقديم عدد كبير من التوضيحات، وأضيفت أوصاف أكثر تفصيلا، وأضيفت بعض الميزات الجديدة (على سبيل المثال، إعلان الطبقات الداخلية)، ولكن المفاهيم الأساسية ظلت دون تغيير. تعتمد هذه الدورة بشكل كبير على مواصفات اللغة.

تم تصميم مواصفات JVM في المقام الأول لمنشئي الأجهزة الافتراضية، وبالتالي لا يتم استخدامها عمليا من قبل مبرمجي Java.

لقد كان JDK منذ فترة طويلة الأداة المفضلة لتطوير التطبيقات. لا يحتوي على أي برامج تحرير نصوص، ولكنه يعمل فقط على ملفات Java الموجودة. يتم تمثيل المترجم بواسطة الأداة المساعدة javac (مترجم Java). يتم تنفيذ الجهاز الظاهري بواسطة برنامج جافا. بالنسبة للتشغيل التجريبي للتطبيقات الصغيرة، هناك أداة مساعدة خاصة لعارض التطبيقات الصغيرة. وأخيرًا، تم تضمين أداة javadoc لإنشاء الوثائق تلقائيًا من التعليمات البرمجية المصدر.

احتوى الإصدار الأول على 8 مكتبات قياسية فقط:

  • java.lang - الفئات الأساسية اللازمة لتشغيل أي تطبيق (الاسم قصير للغة)؛
  • java.util - العديد من فئات المساعدة المفيدة؛
  • java.applet - فئات لإنشاء التطبيقات الصغيرة؛
  • java.awt، java.awt.peer - مكتبة لإنشاء واجهة مستخدم رسومية (GUI)، تسمى Abstract Window Toolkit، AWT، الموضحة بالتفصيل في المحاضرة 11؛
  • java.awt.image - فئات إضافية للعمل مع الصور؛
  • java.io - العمل مع تدفقات البيانات (التدفقات) والملفات؛
  • Java.net - العمل مع الشبكة.

وبالتالي، تبدأ جميع المكتبات بجافا، فهي المكتبات القياسية. يمكن لجميع الإصدارات الأخرى (بدءًا بـ com وorg وما إلى ذلك) التغيير في أي إصدار دون دعم التوافق.

تم إصدار الإصدار الأخير من JDK 1.0 في يناير 1996.

دعونا نشرح على الفور نظام تسمية الإصدار. يتكون تعيين الإصدار من ثلاثة أرقام. الأول هو دائمًا 1. وهذا يعني الحفاظ على التوافق الكامل بين كافة إصدارات 1.x.x. وهذا يعني أن البرنامج المكتوب على JDK الأقدم سيعمل دائمًا بنجاح على برنامج أحدث. يتم أيضًا الحفاظ على التوافق مع الإصدارات السابقة كلما أمكن ذلك - إذا تم تجميع البرنامج باستخدام JDK أحدث، ولم يتم استخدام مكتبات جديدة، فستتمكن الأجهزة الافتراضية الأقدم في معظم الحالات من تنفيذ مثل هذه التعليمات البرمجية.

تم تغيير الرقم الثاني من 0 إلى 4 (الرقم الأخير في وقت إنشاء الدورة التدريبية). في كل إصدار، كان هناك توسع كبير في المكتبات القياسية (212، 504، 1781، 2130 و2738 - عدد الفئات والواجهات من 1.0 إلى 1.4)، كما تمت إضافة بعض الميزات الجديدة إلى اللغة نفسها. لقد تغيرت أيضًا الأدوات المساعدة المضمنة في JDK.

وأخيرا، يشير الرقم الثالث إلى تطوير نسخة واحدة. لا شيء يتغير في اللغة أو المكتبات، يتم حذف الأخطاء فقط، ويتم إجراء التحسين، ويمكن تغيير (إضافة) وسيطات الأداة المساعدة. لذلك، أحدث إصدار من JDK 1.0 هو 1.0.2.

على الرغم من عدم إزالة أي شيء مع تطوير الإصدار 1.x، إلا أن بعض الوظائف أو الفئات أصبحت قديمة بالطبع. تم الإعلان عن إهمالها، وعلى الرغم من أنه سيتم دعمها حتى الإعلان عن الإصدار 2.0 (ولم يُسمع عنها أي شيء حتى الآن)، إلا أنه لا يوصى بها.

جنبا إلى جنب مع النجاح الأولي لـ JDK 1.0 جاءت الانتقادات. وكانت العيوب الرئيسية التي اكتشفها المطورون على النحو التالي. الأول، بالطبع، هو الأداء. كان الجهاز الظاهري الأول بطيئًا جدًا. ويرجع ذلك إلى حقيقة أن JVM هو في الأساس مترجم يعمل دائمًا بشكل أبطأ من التعليمات البرمجية المترجمة. ومع ذلك، فإن التحسين الناجح الذي أزال هذا العيب لم يأت بعد. كما لوحظ أيضًا ضعف قدرات AWT، ونقص العمل مع قواعد البيانات، وما إلى ذلك.

في ديسمبر 1996، تم الإعلان عن إصدار جديد من JDK 1.1، وتم إصدار نسخة تجريبية على الفور للوصول المجاني. تم إصدار النسخة النهائية في فبراير 1997. ما الذي تمت إضافته في الإصدار الجديد من Java؟

وبطبيعة الحال، تم إيلاء اهتمام خاص للأداء. تم تحسين العديد من أجزاء الجهاز الظاهري وإعادة كتابتها باستخدام المجمع بدلاً من لغة C كما كان من قبل. بالإضافة إلى ذلك، منذ أكتوبر 1996، قامت شركة Sun بتطوير منتج جديد - المترجم Just-In-Time، JIT. وتتمثل مهمتها في ترجمة كود Java الثانوي للبرنامج إلى الكود "الأصلي" لنظام التشغيل. وبالتالي، يزداد وقت تشغيل البرنامج، ولكن يمكن تسريع التنفيذ في بعض الحالات بما يصل إلى 50 مرة! منذ يوليو 1997، ظهر تطبيق لنظام التشغيل Windows وتم تضمين JIT كمعيار قياسي في JDK مع إمكانية تعطيله.

تمت إضافة العديد من الميزات الهامة الجديدة. تسمح لك تقنية JavaBeans، التي تم الإعلان عنها في عام 1996، بإنشاء مكونات مرئية يمكن دمجها بسهولة في أدوات التطوير المرئي. يوفر JDBC (اتصال قاعدة بيانات Java) إمكانية الوصول إلى قواعد البيانات. RMI (استدعاء الطريقة عن بعد) يجعل من السهل إنشاء التطبيقات الموزعة. تم تحسين دعم اللغات الوطنية ونظام الأمان.

في الأسابيع الثلاثة الأولى، تم تنزيل JDK 1.1 أكثر من 220 ألف مرة، أي بعد أقل من عام - أكثر من مليوني مرة. في الوقت الحالي، يعتبر الإصدار 1.1 قديمًا تمامًا وتوقف تطويره عند 1.1.8. ومع ذلك، نظرًا لأن المتصفح الأكثر شيوعًا، MS IE، لا يزال يدعم هذا الإصدار فقط، فإنه يستمر استخدامه لكتابة التطبيقات الصغيرة.

بالإضافة إلى ذلك، في 11 مارس 1997، بدأت شركة Sun في تقديم Java Runtime Environment، JRE (Java Runtime Environment). في الأساس، هذا هو الحد الأدنى من تنفيذ الجهاز الظاهري المطلوب لتشغيل تطبيقات Java، بدون مترجم أو أدوات تطوير أخرى. إذا كان المستخدم يريد فقط تشغيل البرامج، فهذا هو بالضبط ما يحتاجه.

كما ترون، يبقى العيب الأهم هو ضعف دعم واجهة المستخدم الرسومية (GUI). في ديسمبر 1996، أعلنت شركة Sun وNetscape عن مكتبة جديدة، IFC (فئات مؤسسة الإنترنت)، التي تم تطويرها بالكامل بلغة Java بواسطة Netscape ومصممة خصيصًا لإنشاء واجهات نوافذ معقدة. في أبريل 1997، أُعلن أن الشركتين تخططان لدمج تقنيات Sun's AWT وNetscape's IFC لإنشاء منتج Java Foundation Classes جديد، JFC، والذي سيتضمن:

  • نافذة متقدمة

لغة جافا. مقدمة.

لفترة طويلة، كان من الصعب تخيل مجلة كمبيوتر بدون مقال مخصص للغة جافا. حتى الصحف والمجلات الشهيرة مثل نيويورك تايمز وواشنطن بوست وبزنس ويك كتبت عنه.

من المستحيل أن نتذكر أن الإذاعة الوطنية العامة خصصت برنامجًا مدته عشر دقائق للغة برمجة. ما إذا كان هذا جيدًا أم سيئًا يعتمد على وجهة نظرك. واستثمار 100 مليون دولار في إنتاج برمجيات تم إنشاؤها باستخدام لغة برمجة معينة؟! تحدثت شركات التليفزيون CNN وCNBC ووسائل الإعلام الأخرى، وما زالت تتحدث، عن كيف يمكن للغة جافا أن تفعل ذلك.

ومع ذلك، فإن هذا الكتاب مخصص للمبرمجين الجادين، وبما أن Java هي لغة برمجة جادة، فلدينا الكثير لنغطيه. لذلك، لن نتعمق في تحليل الوعود الإعلانية ونحاول معرفة ما هو صحيح وما هو خيال. بدلاً من ذلك، سنصف لغة Java بشيء من التفصيل كلغة برمجة (بما في ذلك، بالطبع، الميزات التي تسمح باستخدامها للعمل على الإنترنت، والتي تسببت في الواقع في الكثير من الضجيج الإعلاني). بعد ذلك، سنحاول فصل الواقع عن الخيال من خلال شرح ما يمكن أن تفعله لغة Java بالفعل وما لا تستطيع فعله.

في البداية، كانت هناك فجوة بين الوعود الإعلانية والقدرات الحقيقية للغة جافا. ومع نضوجها، أصبحت التكنولوجيا أكثر استقرارًا وموثوقية، وانخفضت التوقعات إلى مستويات معقولة. يتم الآن استخدام Java بشكل متزايد لإنشاء "برامج وسيطة" تدعم الاتصال بين العملاء وموارد الخادم (مثل قواعد البيانات).

على الرغم من أن هذه التطبيقات المهمة ليست مذهلة، إلا أن Java أثبتت هنا أنها أكثر فائدة نظرًا لاستقلاليتها الآلية، وتعدد الخيوط، وقدرات برمجة الشبكة. بالإضافة إلى ذلك، أخذت لغة Java زمام المبادرة في مجال الأنظمة المدمجة، لتصبح المعيار الفعلي للأجهزة المحمولة، والأكشاك الافتراضية، وأجهزة الكمبيوتر الموجودة على متن السيارة، وما إلى ذلك. ومع ذلك، فإن المحاولات الأولى لإعادة كتابة برامج واسعة النطاق لأجهزة الكمبيوتر الشخصية في جافا لم تكن ناجحة - فقد تبين أن التطبيقات الناتجة منخفضة الطاقة وبطيئة. ومع ظهور الإصدار الجديد، تم حل بعض هذه المشكلات، ولكن لا يزال يتعين الاعتراف بأن المستخدمين، بشكل عام، لا يهتمون على الإطلاق باللغة المكتوبة بها البرامج التي يشترونها. نحن نعتقد أن الفوائد الرئيسية للغة Java ستأتي من إنشاء أنواع جديدة من الأجهزة والتطبيقات، وليس من إعادة كتابة البرامج الموجودة.

لغة جافا كأداة برمجة

باعتبارها لغة برمجة، أوفت Java بوعودها الإعلانية. إنها بلا شك واحدة من أفضل اللغات المتاحة للمبرمجين الجادين. لدى Java القدرة على أن تصبح لغة برمجة رائعة، ولكن ربما فات الأوان الآن. عندما تظهر لغة برمجة جديدة، تظهر على الفور المشكلة المزعجة المتمثلة في توافقها مع البرامج التي تم إنشاؤها مسبقًا. علاوة على ذلك، حتى لو كان من الممكن إجراء تغييرات على هذه البرامج دون التدخل في نصوصها، فمن الصعب على مبدعي اللغة التي تلقى ترحيبًا حارًا من قبل الجمهور، مثل جافا، أن يقولوا صراحة: "نعم، ربما نكون قد صنعنا خطأ في تطوير الإصدار X، ولكن الإصدار Y سيكون أفضل." ونتيجة لذلك، وفي انتظار المزيد من التحسينات، يجب أن نذكر أن بنية لغة جافا لن تتغير بشكل كبير في المستقبل القريب.

السؤال البديهي هو:" كيف قمت بتحسين لغة جافا؟"اتضح أن هذا لم يتم عن طريق تحسين لغة البرمجة نفسها، ولكن عن طريق التغيير الجذري لمكتبات البرامج المكتوبة بلغة جافا. لقد غيرت شركة صن مايكروسيستمز كل شيء: بدءًا من أسماء وظائف المكتبة الفردية (مما يجعلها ذات معنى أكثر) و طريقة عمل وحدات الرسومات (تغيير الطريقة التي تتعامل بها مع الأحداث وإعادة كتابة البرامج العاملة جزئيًا)، والانتهاء بإنشاء ميزات لغة جديدة، مثل مرافق الطباعة، التي لم تكن موجودة في Java 1.0، وكانت النتيجة برنامجًا أكثر فائدة منصة من جميع الإصدارات السابقة من لغة جافا.

أصدرت Microsoft منتجها الخاص المسمى J++ والمتعلق بلغة Java. يتم ترجمة لغة J++ بواسطة جهاز افتراضي متوافق مع Java Virtual Machine عند تنفيذ الكود الثانوي، لكن الواجهات ذات الكود الخارجي تختلف بشكل كبير بين هذه اللغات. تتمتع لغات J++ وJava بنفس البنية تقريبًا. ومع ذلك، قامت Microsoft بإنشاء بنيات لغة إضافية. جميعها ذات قيمة مشكوك فيها إلى حد ما، باستثناء Windows API. بالإضافة إلى حقيقة أن هذه اللغات لها نفس بناء الجملة، فإن مكتباتها الأساسية (السلاسل، والأدوات المساعدة، وأدوات برمجة الشبكات، وأدوات تعدد مؤشرات الترابط، ومكتبات الرياضيات، وما إلى ذلك) هي نفسها في الأساس.

ومع ذلك، تختلف مكتبات الرسومات وواجهة المستخدم والوصول إلى الكائنات البعيدة تمامًا بين هذه اللغات. في الوقت الحالي، لم تعد Microsoft تدعم لغة J++، حيث قامت بتطوير لغة جديدة، C#، والتي لها العديد من أوجه التشابه مع Java، ولكنها تستخدم جهازًا افتراضيًا مختلفًا. لا يغطي هذا الكتاب لغة J++ أو لغة C#.

فوائد لغة جافا

1) من أهم مميزات لغة جافا الاستقلال عن المنصة التي يتم تنفيذ البرامج عليها: يمكن تشغيل نفس الكود تحت أنظمة التشغيل Windows، Solaris، Linux، Machintosh، إلخ.
يعد هذا ضروريًا حقًا عند تنزيل البرامج عبر الإنترنت لتنفيذها لاحقًا في ظل أنظمة تشغيل مختلفة.

2) ميزة أخرى هي أن بناء جملة لغة جافا يشبه بناء جملة لغة C++، ويمكن للمبرمجين الذين يعرفون لغات C وC++ تعلمها بسهولة. صحيح، بالنسبة للمبرمجين الذين يتحدثون Visual Basic، قد يكون بناء الجملة هذا غير عادي.

إذا لم يسبق لك البرمجة بلغة C++، فلن تكون بعض المصطلحات المستخدمة في هذا القسم واضحة لك. وفي هذه الحالة، يمكنك تخطيها. بحلول الوقت الذي تصل فيه إلى نهاية الفصل السادس، ستصبح هذه المصطلحات مألوفة لك.

3) جافا أيضًا - لغة موجهة للكائنات بالكامل، حتى أكثر من C++. جميع الكيانات في لغة جافا هي كائنات، باستثناء بعض الأنواع البدائية، مثل الأرقام. (لأن البرمجة كائنية التوجه تجعل من السهل تطوير المشاريع المعقدة، فقد حلت محل البرمجة المنظمة الأقدم. إذا لم تكن على دراية بالبرمجة كائنية التوجه، فإن الفصول من 3 إلى 6 ستعطيك كل ما تحتاج لمعرفته عنها.)

ومع ذلك، فإن تطوير لهجة أخرى محسنة قليلاً للغة C++ ليس كافيًا. والأهم من ذلك، أنه من الأسهل تطوير برامج خالية من الأخطاء في Java مقارنةً بـ C++. لماذا؟ قضى مطورو لغة Java وقتًا طويلاً يتساءلون عن سبب كون البرامج المكتوبة بلغة C++ عرضة للأخطاء. لقد زودوا لغة Java بالأدوات اللازمة للقضاء على إمكانية إنشاء برامج تخفي الأخطاء الأكثر شيوعًا. للقيام بذلك، يتم ما يلي في لغة جافا.

4) يتم استبعاد إمكانية تخصيص الذاكرة وتحريرها بشكل صريح.
يتم تحرير الذاكرة في Java تلقائيًا باستخدام آلية جمع البيانات المهملة. يتم ضمان المبرمج ضد الأخطاء المتعلقة بالاستخدام غير السليم للذاكرة.

5) تم تقديم المصفوفات الحقيقية وتم حظر حساب المؤشر.
الآن لا يستطيع المبرمجون من حيث المبدأ مسح البيانات من الذاكرة بسبب الاستخدام غير الصحيح للمؤشرات.

6) تم القضاء على إمكانية الخلط بين عامل التعيين وعامل مقارنة المساواة.
الآن لا يمكنك حتى تجميع عبارة if(ntries = 3). . . (قد لا يلاحظ مبرمجو Visual Basic أي مشكلة هنا على الإطلاق، حيث أن هذا الخطأ هو مصدر معظم الارتباك في C وC++).

7) يتم استبعاد الميراث المتعدد. لقد تم استبداله بمفهوم جديد - واجهة مستعارة من لغة Objective C.
تمنح الواجهة المبرمج كل ما يمكنه الحصول عليه تقريبًا من الميراث المتعدد، مع تجنب التعقيدات التي تنشأ عند إدارة التسلسل الهرمي للفئات.

مميزات لغة جافا

بسيط
قابل للتفسير
وزعت
موثوق
آمن
آلة مستقلة
وجوه المنحى
أداء عالي
متعدد الخيوط
متحرك
مستقلة عن هندسة الكمبيوتر

لقد تطرقنا بالفعل إلى بعض هذه النقاط في القسم الأخير. في هذا القسم سنقوم بما يلي: تقديم اقتباسات من دليل لغة Java تكشف ميزات اللغة؛ سوف نشارك القراء أفكارنا حول الخصائص الفردية للغة، بناءً على تجربتنا الخاصة في العمل مع أحدث إصدار لها.

بسيط

أردنا إنشاء نظام سهل البرمجة ولا يتطلب تدريبًا إضافيًا ويأخذ في الاعتبار ممارسات ومعايير البرمجة المعمول بها. لذلك، على الرغم من أننا اعتبرنا لغة C++ غير مناسبة لهذه الأغراض، فقد تم تصميم Java لتكون متشابهة قدر الإمكان لتسهيل الوصول إلى النظام. تفتقر Java إلى العديد من الميزات الأقل استخدامًا والغامضة والمبهمة لـ C++ والتي نعتقد أنها تضر أكثر مما تنفع.

بناء جملة Java هو في الأساس نسخة مقطرة من بناء جملة C++. لا تحتوي هذه اللغة على ملفات رأس، ومؤشر حسابي (والمؤشرات نفسها)، وهياكل، واتحادات، وتحميل مشغل زائد، وفئات أساسية افتراضية، وما إلى ذلك. (تم وصف الاختلافات بين Java وC++ في الملاحظات حول لغة C++ المنتشرة في جميع أنحاء الكتاب.) ومع ذلك، لم يحاول المطورون تصحيح جميع أوجه القصور في لغة C++.

على سبيل المثال، يظل بناء جملة عبارة التبديل في Java دون تغيير. بمعرفة لغة C++، سيكون من السهل الانتقال إلى بناء جملة Java.
إذا كنت تستخدم عادة بيئة برمجة مرئية (مثل Visual Basic)، فقد تجد أن Java صعبة.
غالبًا ما يبدو بناء الجملة غريبًا جدًا (على الرغم من أنه ليس من الصعب فهم معنى التعبير). والأهم من ذلك، أن هناك الكثير من البرمجة المتضمنة عند العمل في Java. يكمن جمال Visual Basic في أن بيئة البرمجة المرئية الخاصة به تسمح لك بإنشاء بنية أساسية للتطبيقات بشكل تلقائي تقريبًا. يتطلب تحقيق نفس النتيجة باستخدام Java البرمجة يدويًا، ولكنه ينتج برامج أقصر بكثير.

ومع ذلك، هناك نوع ثالث من بيئة البرمجة يسمح لك بإنشاء برامج باستخدام تقنية السحب والإفلات.

جانب آخر من البساطة هو الإيجاز. أحد أهداف لغة Java هو تمكين تطوير البرامج التي يمكن تشغيلها بشكل مستقل تمامًا على الأجهزة الصغيرة. يبلغ حجم المترجم الرئيسي ودعم الفصل حوالي 40 كيلو بايت؛ تستهلك المكتبات القياسية ودعم الخيوط (خاصة النواة الصغيرة المستقلة) 17 كيلوبايت أخرى.
هذا نجاح كبير. ومع ذلك، لاحظ أن مكتبات دعم واجهة المستخدم الرسومية أكبر بكثير.

وجوه المنحى

ببساطة، البرمجة الموجهة للكائنات هي طريقة برمجة تركز على البيانات (أي الكائنات) ووسائل الوصول إليها. لاستخدام تشبيه النجارة، يركز الحرفي الموجه بشكل أساسي على الكرسي الذي يصنعه ويهتم بشكل ثانوي فقط بالأدوات اللازمة لتصنيعه؛ وفي الوقت نفسه، لا يفكر النجار غير الموجه إلا في أدواته. الخصائص الموجهة للكائنات في Java وC++ هي نفسها بشكل أساسي.

لقد أثبت التوجه الكائني قيمته بالفعل على مدار الثلاثين عامًا الماضية، ومن المستحيل تخيل لغة برمجة حديثة بدونه. في الواقع، فإن الميزات الموجهة للكائنات في لغة Java قابلة للمقارنة مع لغة C++. والفرق الرئيسي بينهما هو آلية الميراث المتعدد، والتي تم العثور على أفضل حل لها في لغة جافا، وكذلك نموذج metaclass للغة جافا.

يوفر الانعكاس (الفصل 5) وتسلسل الكائنات (الفصل 12) كائنات وأدوات متينة لإنشاء واجهات مستخدم رسومية من مكونات جاهزة.

إذا لم يسبق لك البرمجة باستخدام لغة كائنية التوجه، فاقرأ الفصول من 4 إلى 6 بعناية. تقدم هذه الفصول أساسيات البرمجة الشيئية وتبين مزاياها مقارنة باللغات التقليدية الموجهة نحو الإجراءات مثل لغة C أو Basic عند تطوير المشاريع المعقدة.

وزعت

تحتوي Java على مكتبة كبيرة من البرامج لنقل البيانات استنادًا إلى TCP/IP (بروتوكول التحكم في الإرسال/بروتوكول الإنترنت)، مثل HTTP (بروتوكول نقل النص التشعبي) أو FTP (بروتوكول نقل الملفات). يمكن للتطبيقات المكتوبة بلغة Java فتح الكائنات والوصول إليها عبر الشبكة باستخدام وتعد عناوين URL (موقع الموارد الموحد) سهلة مثل الشبكة المحلية.

توفر لغة Java أدوات قوية ومريحة للتواصل. أي شخص حاول كتابة برامج للإنترنت بلغات أخرى سوف يفاجأ بسرور بمدى سهولة حل المهام الأكثر صعوبة في Java، على سبيل المثال، فتح اتصالات الشبكة (المآخذ). الآلية الأنيقة التي تتكون مما يسمى بـ servlets تجعل العمل على الخادم فعالاً للغاية.

يتم دعم Servlets بواسطة العديد من خوادم الويب الشائعة. (ستتم تغطية الشبكات في المجلد 2.) يتم توفير الاتصال بين الكائنات الموزعة في Java من خلال آلية استدعاء الطريقة عن بعد (يتم تناولها أيضًا في المجلد 2).

موثوق

تم تصميم لغة Java لإنشاء برامج يجب أن تعمل بشكل موثوق في أي موقف. ينصب التركيز الرئيسي لـ Java على الاكتشاف المبكر للأخطاء المحتملة، والفحص الديناميكي (أثناء تنفيذ البرنامج)، والقضاء على المواقف المعرضة للخطأ... والفرق الوحيد المهم بين Java وC++ هو نموذج المؤشر المعتمد في Java، والذي يلغي الخطأ. إمكانية الكتابة فوق قسم من الذاكرة وإتلاف البيانات.

هذه الخاصية مفيدة جدًا أيضًا. يكتشف مترجم لغة Java الأخطاء التي يتم اكتشافها في اللغات الأخرى فقط أثناء تنفيذ البرنامج. بالإضافة إلى ذلك، سيكون المبرمجون الذين أمضوا ساعات طويلة في البحث عن خطأ تسبب في تلف الذاكرة بسبب مؤشر غير صالح، سعداء جدًا بمعرفة أن مثل هذه المشكلات لا يمكن أن تنشأ من حيث المبدأ في لغة Java.

إذا كنت قد قمت بالبرمجة مسبقًا باستخدام Visual Basic أو COBOL، والتي لا تستخدم المؤشرات بشكل صريح، فقد لا تفهم سبب أهمية ذلك. مبرمجو C أقل حظًا بكثير. إنهم بحاجة إلى مؤشرات للوصول إلى السلاسل والمصفوفات والكائنات وحتى الملفات. عند البرمجة في Visual Basic، لا شيء من هذا مطلوب، ولا داعي للقلق بشأن تخصيص الذاكرة لهذه الكيانات. ومن ناحية أخرى، يصعب جدًا تنفيذ العديد من هياكل البيانات بلغة لا تحتوي على مؤشرات. بالنسبة للبنيات العادية مثل السلاسل والمصفوفات، ليست هناك حاجة للمؤشرات. يتم تفعيل القوة الكاملة للمؤشرات فقط عندما لا يمكنك الاستغناء عنها، على سبيل المثال، عند إنشاء قوائم مرتبطة. مبرمج Java خالٍ إلى الأبد من المؤشرات السيئة والتخصيصات السيئة وتسرب الذاكرة.

آمن

تم تصميم لغة Java للاستخدام في بيئة شبكية أو موزعة. ولهذا السبب، تم إيلاء الكثير من الاهتمام للسلامة. تتيح لك لغة Java إنشاء أنظمة محمية من الفيروسات والتدخل الخارجي.

لقد كتبنا في الطبعة الأولى: "لا تقل أبداً أبداً"، وكنا على حق. اكتشف فريق من خبراء الأمن من جامعة برينستون الثغرات الأمنية الأولى في Java 1.0 بعد وقت قصير من إصدار الإصدار الأول من JDK. علاوة على ذلك، واصلوا هم والمتخصصون الآخرون العثور على المزيد والمزيد من الأخطاء الجديدة في آليات الأمان لجميع الإصدارات اللاحقة من لغة جافا.

الجانب الإيجابي لهذا الموقف هو أن فريق لغة Java قد أعلن أنه لا يتسامح مطلقًا مع أي أخطاء أمنية وبدأ على الفور في إصلاح أي مشاكل موجودة في آلية أمان التطبيق الصغير. وعلى وجه الخصوص، من خلال نشر المواصفات الداخلية لمترجم لغة جافا، سهّلت شركة Sun العثور على الأخطاء الأمنية المخفية وجذبت خبراء مستقلين للعثور عليها.

وقد أدى ذلك إلى زيادة احتمالية اكتشاف أي أخطاء في نظام الأمان قريبًا. على أية حال، من الصعب للغاية هزيمة نظام أمان لغة Java. وكانت الأخطاء المكتشفة حتى الآن شبه خفية، وعددها صغير (نسبيًا).

تحتوي صفحة ويب الأمان الخاصة بشركة Sun على عنوان URL التالي: http://java.sun.com/sfaq/.

دعونا ندرج بعض المواقف التي يمنعها نظام أمان لغة Java.

1) تجاوز سعة المكدس لبرنامج قابل للتنفيذ، والذي كان سببه "الدودة" سيئة السمعة التي انتشرت على الإنترنت.

2) تلف مناطق الذاكرة الموجودة خارج المساحة المخصصة للعملية.

3) قراءة وكتابة الملفات المحلية عند استخدام محمل فئة آمن، مثل متصفح الويب، الذي يمنع الوصول إلى مثل هذا الملف.

جميع تدابير السلامة هذه مناسبة وعادةً ما تعمل بشكل لا تشوبه شائبة، ولكن لا يضر أبدًا توخي الحذر. على الرغم من أن الأخطاء التي تم اكتشافها حتى الآن كانت بعيدة كل البعد عن كونها تافهة، وغالبًا ما تظل تفاصيل اكتشافها سرية، إلا أنه لا بد من الاعتراف بأنه ربما لا يزال من المستحيل إثبات أمان لغة جافا.

ومع مرور الوقت، تمت إضافة وسائل حماية جديدة إلى اللغة. بدءًا من الإصدار 1.1، قدمت لغة Java مفهوم الفئات الموقعة رقميًا. باستخدام فئة موقعة رقميا، يمكنك التأكد من مؤلفها. إذا كنت تثق به، فيمكنك منح هذا الفصل كافة الامتيازات المتوفرة على جهازك.

تعتمد آلية تسليم التعليمات البرمجية البديلة التي تقترحها Microsoft على تقنية ActiveX وتستخدم التوقيعات الرقمية فقط للأمان. من الواضح أن هذا لا يكفي - يمكن لأي مستخدم لبرنامج Microsoft أن يؤكد أن البرامج من الشركات المصنعة المعروفة غالبًا ما تتعطل، مما يؤدي إلى خطر تلف البيانات. يعد أمان Java أقوى بكثير من تقنية ActiveX لأنه يتحكم في التطبيق منذ لحظة تشغيله ويمنعه من التسبب في أي ضرر.

الهندسة المعمارية مستقلة

يقوم المترجم بإنشاء ملف كائن، لا يعتمد تنسيقه على بنية الكمبيوتر؛ ويمكن تنفيذ البرنامج المترجم على أي معالج تحت سيطرة نظام تنفيذ برنامج Java. للقيام بذلك، يقوم مترجم لغة Java بإنشاء أوامر bytecode مستقلة عن بنية الكمبيوتر المحددة. تم تصميم الرمز الثانوي بحيث يمكن تفسيره بسهولة على أي جهاز أو ترجمته إلى رمز يعتمد على الجهاز بسرعة.

هذه ليست فكرة جديدة. منذ أكثر من 20 عامًا، استخدم كل من تطبيق Pascal الخاص بـNiclaus Wirth وUCSD Pascal نفس التقنية. يوفر استخدام الرموز الثانوية مكاسب كبيرة في تنفيذ البرنامج (على الرغم من أن التجميع المتزامن يعوض ذلك في كثير من الحالات). لقد قام مطورو لغة Java بعمل ممتاز في تطوير مجموعة من تعليمات البايت كود التي تعمل بشكل مثالي على معظم أجهزة الكمبيوتر الحديثة، ويمكن ترجمتها بسهولة إلى تعليمات الآلة الحقيقية.

آلة مستقلة

على عكس C وC++، لا تحتوي مواصفات Java على جوانب خاصة بالتنفيذ. يتم تحديد حجم أنواع البيانات الأساسية والعمليات الحسابية عليها بدقة.

على سبيل المثال، النوع int في Java يعني دائمًا عددًا صحيحًا بطول 32 بت. في لغات C وC++، يمكن أن يعني نوع int إما عددًا صحيحًا 16 بت أو 32 بت، بالإضافة إلى عدد صحيح بحجم عشوائي، حسب اختيار مطور مترجم معين. القيد الوحيد هو أن حجم نوع int لا يمكن أن يكون أقل من حجم نوع int قصير وأكبر من حجم نوع int طويل. الحجم الثابت للأنواع الرقمية يتجنب العديد من المتاعب المرتبطة بتشغيل البرامج على أجهزة كمبيوتر مختلفة. يتم تخزين البيانات الثنائية ونقلها بتنسيق ثابت، مما يتجنب أيضًا سوء الفهم المرتبط بترتيب البايت المختلف على منصات مختلفة (تعارض "النهاية الكبيرة/النهاية الصغيرة"). يتم حفظ السلاسل بتنسيق Unicode القياسي.

تحدد المكتبات، التي تعد جزءًا من النظام، واجهة مستقلة عن الآلة. على سبيل المثال، توفر اللغة فئة Window المجردة وتطبيقاتها لأنظمة التشغيل Unix وWindows وMacintosh.

أي شخص حاول كتابة برنامج يعمل بشكل جيد على أنظمة Windows وMacintosh وعشرة نكهات من Unix يعرف أن هذه مهمة صعبة للغاية. قام إصدار Java بمحاولة شجاعة لحل هذه المشكلة من خلال توفير مجموعة أدوات بسيطة تعمل على تكييف عناصر واجهة المستخدم الشائعة مع مجموعة واسعة من منصات البرامج. وللأسف، فإن المكتبة التي استغرقت الكثير من العمل، لم تحقق نتائج مقبولة على مختلف المنصات. (وفي الوقت نفسه، ظهرت أخطاء مختلفة في برامج الرسومات على منصات مختلفة.)

ومع ذلك، كانت هذه مجرد البداية. في العديد من التطبيقات، يعد استقلال الآلة أكثر أهمية من تعقيد واجهة المستخدم الرسومية. هذه هي التطبيقات التي استفادت من إصدار Java 1.0. ومع ذلك، فقد تم الآن إعادة تصميم مجموعة أدوات واجهة المستخدم الرسومية (GUI) بالكامل ولم تعد تعتمد على واجهة المستخدم الموجودة على الكمبيوتر المضيف. الإصدار الجديد أكثر فائدة، وفي رأينا، أكثر جاذبية للمستخدم من الإصدارات السابقة.

قابل للتفسير

يمكن إرسال مترجم لغة Java إلى أي جهاز وتنفيذ الكود الثانوي عليه مباشرةً. نظرًا لأن تحرير الروابط يعد عملية أسهل، فقد يصبح تطوير البرامج أسرع وأكثر كفاءة.

قد يكون هذا ميزة عند تطوير التطبيقات، ولكن الاقتباس أعلاه مبالغة واضحة. على أية حال، فإن مترجم Java المضمن في JSDK (Java Software Development Kit) بطيء جدًا. (بعض المترجمين من الدرجة الثالثة، مثل تلك التي تقدمها شركة IBM، أسرع بكثير.) تعد سرعة إعادة الترجمة مجرد عامل واحد في كفاءة بيئة البرمجة. عند مقارنة سرعة بيئات برمجة Java وVisual Basic، قد تشعر بخيبة أمل.

أداء عالي

في حين أن الرموز الثانوية المفسرة بشكل عام تتمتع بأداء أكثر من كافٍ، إلا أن هناك مواقف تتطلب كفاءة أكبر. يمكن ترجمة الرموز الثانوية بسرعة (أثناء وقت التشغيل) إلى رموز الجهاز الخاصة بالمعالج المحدد الذي يعمل عليه التطبيق.

إذا كنت تستخدم مترجمًا لتنفيذ الرموز الثانوية، فيجب ألا تستخدم عبارة "الأداء العالي". ومع ذلك، في العديد من المنصات، هناك نوع آخر من الترجمة ممكن، يتم توفيره بواسطة المترجمين في الوقت المناسب (JIT). يقومون بترجمة الكود الثانوي إلى كود أصلي، وتخزين النتيجة في الذاكرة، ثم استدعائها عند الحاجة. وبما أن الترجمة الفورية تتم مرة واحدة فقط، فإن هذا الأسلوب يزيد من السرعة عدة مرات.

على الرغم من أن المترجمين المتزامنين ما زالوا أبطأ من المترجمين المعتمدين على الآلة، إلا أنهم على أية حال أسرع بكثير من المترجمين الفوريين، حيث يوفرون تسريعًا يصل إلى 10 أو حتى 20 ضعفًا لبعض البرامج. تتحسن هذه التقنية باستمرار وقد تصل في النهاية إلى سرعات لن يتجاوزها المترجمون التقليديون أبدًا. على سبيل المثال، يمكن للمترجم المتزامن تحديد أي جزء من التعليمات البرمجية يتم تنفيذه في كثير من الأحيان وتحسينه من أجل سرعة التنفيذ.

متعدد الخيوط

يوفر تفاعلًا أفضل وتنفيذًا للبرنامج.

إذا سبق لك أن حاولت تنفيذ حوسبة متعددة الخيوط بأي لغة برمجة أخرى، فسوف تتفاجأ بمدى سهولة القيام بذلك في Java. يمكن للخيوط في Java الاستفادة من الأنظمة متعددة المعالجات إذا كان نظام التشغيل يسمح بذلك. لسوء الحظ، تختلف تطبيقات الخيوط على معظم الأنظمة الأساسية بشكل كبير، ولا يبذل مصممو لغة Java أي محاولة لتحقيق التوحيد. يظل رمز استدعاء سلاسل الرسائل فقط كما هو لجميع الأجهزة؛ تؤجل لغة Java تنفيذ مؤشرات الترابط المتعددة إلى نظام التشغيل الأساسي أو مكتبة مؤشرات الترابط. (يتم تغطية المواضيع في المجلد 2.) وعلى الرغم من ذلك، فإن سهولة الحوسبة متعددة الخيوط هي التي تجعل Java جذابة للغاية لتطوير برامج الخادم.

متحرك

في العديد من النواحي، تعد لغة Java أكثر ديناميكية من لغة C أو C++. لقد تم تصميمه للتكيف بسهولة مع البيئة المتغيرة باستمرار. يمكن إضافة أساليب وكائنات جديدة بحرية إلى المكتبات دون التسبب في أي ضرر. تسهل لغة Java الحصول على معلومات حول تقدم البرنامج.

يعد هذا أمرًا مهمًا جدًا في الحالات التي تحتاج فيها إلى إضافة تعليمات برمجية إلى برنامج قيد التشغيل بالفعل. والمثال الرئيسي على ذلك هو الكود الذي يتم تنزيله من الإنترنت ليتم تنفيذه بواسطة المتصفح. في Java 1.0، لم يكن من السهل الحصول على معلومات حول تقدم برنامج قيد التشغيل، لكن الإصدار الحالي من لغة Java يكشف للمبرمج كلاً من بنية وسلوك كائنات البرنامج قيد التشغيل.
يعد هذا مفيدًا جدًا للأنظمة التي يجب أن تقوم بتحليل الكائنات أثناء تنفيذ البرنامج. تتضمن هذه الأنظمة أدوات واجهة المستخدم الرسومية، ومصححات الأخطاء الذكية، ومكونات المكونات الإضافية، وقواعد بيانات الكائنات.

جافا والإنترنت

الفكرة بسيطة - يقوم المستخدمون بتنزيل Java bytecodes من الإنترنت وتنفيذها على أجهزتهم. تسمى برامج Java التي تعمل ضمن متصفحات الويب بالتطبيقات الصغيرة. لاستخدام التطبيق الصغير، تحتاج إلى متصفح ويب يدعم لغة Java ويمكنه تفسير الرموز الثانوية. الكود المصدري للغة جافا مرخص لشركة Sun، التي تصر على بقاء اللغة نفسها وبنية مكتباتها الأساسية دون تغيير. لسوء الحظ، في الواقع كل شيء ليس كذلك. تدعم الإصدارات المختلفة من متصفحي Netscape وInternet Explorer إصدارات مختلفة من لغة Java، وبعض هذه الإصدارات قديمة إلى حد كبير. يؤدي هذا الوضع المؤسف إلى خلق عقبات بشكل متزايد أمام تطوير التطبيقات الصغيرة التي تستفيد من أحدث إصدار من لغة Java. ولحل هذه المشكلة، قامت شركة Sun بتطوير Java Plug-in، الذي يوفر البيئة الأكثر تقدمًا لتشغيل برامج Java في متصفحي Netscape وInternet Explorer.

يشبه تحميل التطبيق الصغير تضمين صورة في صفحة ويب. يصبح التطبيق الصغير جزءًا من الصفحة، ويتدفق النص حول المساحة التي يشغلها. لكن الفرق هو أن الصورة الآن حية. فهو يستجيب لأوامر المستخدم، ويغير مظهره، ويسمح بإرسال البيانات بين الكمبيوتر الذي يتم عرض التطبيق الصغير عليه والكمبيوتر الذي يتحكم في التطبيق الصغير.

يشبه تحميل التطبيق الصغير إدراج صورة في صفحة ويب. يصبح التطبيق الصغير جزءًا من الصفحة، ويتدفق النص حول المساحة التي يشغلها. النقطة المهمة هي أن الصورة "حية". فهو يستجيب لأوامر المستخدم، ويغير مظهره، وينقل البيانات بين الكمبيوتر الذي يقوم بتشغيل التطبيق الصغير والكمبيوتر الذي يتحكم في التطبيق الصغير.

في التين. يوضح الشكل 1.1 مثالاً جيدًا لصفحة ويب ديناميكية تقوم بإجراء حسابات معقدة وتستخدم برنامجًا صغيرًا لعرض الجزيئات. لفهم بنية الجزيء بشكل أفضل، يمكنك تدويره أو تكبيره باستخدام الماوس. ولا يمكن تنفيذ مثل هذه المعالجات على صفحات الويب الثابتة، ولكن التطبيقات الصغيرة تجعل ذلك ممكنًا. (يمكن العثور على هذا التطبيق الصغير على http://jmol.sourceforge.net.)

أرز. 1.1. التطبيق الصغير جمول

باستخدام التطبيقات الصغيرة، يمكنك إضافة أزرار وحقول نصية جديدة إلى صفحة ويب. ومع ذلك، فإن مثل هذه التطبيقات تكون بطيئة في التحميل عبر خط الهاتف.

يمكن القيام بنفس الشيء تقريبًا باستخدام HTML الديناميكي، أو نماذج HTML (لغة ترميز النص التشعبي)، أو لغة البرمجة النصية مثل JavaScript. بالطبع، كانت التطبيقات الأولى مخصصة للرسوم المتحركة: الكرات الأرضية الدوارة، وشخصيات الرسوم المتحركة الراقصة، والنصوص الفاخرة، وما إلى ذلك. ومع ذلك، يمكن لصور GIF المتحركة أن تفعل معظم الشيء نفسه، كما أن HTML الديناميكي، جنبًا إلى جنب مع البرمجة النصية، يفعل أكثر بكثير من التطبيقات الصغيرة.

نتيجة لعدم توافق المتصفح وعمليات التحميل غير المتسقة عبر اتصالات الشبكة البطيئة، لم تكن التطبيقات الصغيرة المصممة لصفحات الويب تقدمًا كبيرًا. في الشبكات المحلية (الإنترانت) الوضع مختلف تمامًا. عادةً لا يكون لديهم مشكلات في النطاق الترددي، لذا فإن وقت تحميل التطبيقات الصغيرة لا يكاد يذكر. على الشبكة المحلية، يمكنك تحديد المتصفح المطلوب أو استخدام برنامج Java Plug-In. لا يمكن للموظفين نقل البرامج المقدمة عبر الشبكة إلى موقع خاطئ أو تثبيتها بشكل غير صحيح، ولا يتعين على مسؤول النظام التجول في جميع الأجهزة العميلة وتحديث البرامج عليها. تم تطوير عدد كبير من البرامج المصممة لمحاسبة المخزون، والتخطيط للعطلات، وسداد تكاليف السفر، وما شابه ذلك من قبل العديد من الشركات في شكل تطبيقات صغيرة تستخدم المتصفحات.

بينما كنا نكتب الكتاب، تحول البندول مرة أخرى من برامج العميل نحو البرمجة من جانب الخادم. على وجه الخصوص، يمكن لخوادم التطبيقات استخدام إمكانات المراقبة لجهاز Java الظاهري لتحميل التوازن ودمج اتصالات قاعدة البيانات ومزامنة الكائنات وتأمين إيقاف التشغيل وإعادة التشغيل وتنفيذ العمليات الأخرى المطلوبة لتطبيقات الخادم القابلة للتطوير والتي يكاد يكون من المستحيل تنفيذها بشكل صحيح. وهكذا، تمكن المبرمجون الذين يقومون بإنشاء التطبيقات من شراء هذه الآليات المعقدة بدلاً من تطويرها بأنفسهم. أدى هذا إلى زيادة إنتاجية المبرمجين - فقد ركزوا على منطق برامجهم، دون تشتيت انتباههم بالتفاصيل المتعلقة بتشغيل الخوادم.

ما هو أمن المعلومات؟ هذه حالة من أمن المعلومات تضمن سريتها وتوافرها وسلامتها.

عادة، من أجل تقييم حالة أمن المعلومات، من الضروري فهم وتحليل التهديدات ومصادرها، وتقييم مستوى الضرر، واحتمالية التنفيذ ومدى أهمية التهديدات، والمخاطر (اختياري) التي قد تؤثر على نظامنا/معلوماتنا .

في رأيي أنه من المستحيل تقييم أمان تقنية واحدة أو لغة برمجة واحدة دون الرجوع إلى طريقة تنفيذ محددة، أي دون منتج برمجي محدد جاهز بلغة لها مواصفات فنية مفصلة تصف البنية و وظائف. ولكن هذا لن يكون كافيا أيضا، لأنه من الضروري تقييم الحالة الأمنية لنظام المعلومات النهائي مع بنيته المحددة، ومجموعة المكونات، والعمليات التجارية، والمعلومات، وأخيرا، الأشخاص. اسمحوا لي أن أعطيكم مثالاً لبناء منزل. لدينا مواد (رمل، أسمنت، حجر مكسر، طوب، إلخ) وأدوات (دلو، مجرفة، مجرفة، إلخ). لن نتمكن من تقييم جودة وموثوقية المنزل النهائي من خلال المواد/الأدوات المستخدمة فقط: كم من الوقت سيستمر، وما إذا كانت هناك شقوق فيه، وما إذا كان الجو باردًا أم هادئًا. تحتاج إلى اختيار تصميم المنزل وتكنولوجيا البناء وفريق من الحرفيين. وفقط بعد الانتهاء من البناء سنكون قادرين على قياس الامتثال للمشروع، وGOST، وSNiPs، والتحقق من قياسات الحماية الحرارية، والضوضاء، والأحمال، وتحليل جودة الأسمنت والإجابة على معظم الأسئلة. ولكن السؤال الأهم هو "إلى متى سيستمر هذا؟" لن يكون لدينا إجابة دقيقة، لأننا لا نعرف جميع ظروف تشغيل المنزل وجميع العوامل التي ستؤثر طوال الوقت.

كيف تكون آمنا في جافا

لنأخذ جافا على سبيل المثال. . إنها لغة برمجة كائنية التوجه؛ تتم ترجمة البرامج المكتوبة بلغة Java إلى Java bytecode، ويتم تنفيذها بواسطة Java Virtual Machine (JVM)، وهو برنامج يعالج الكود الثانوي ويمرر التعليمات إلى الأجهزة كمترجم. تتمثل ميزة هذه الطريقة في تنفيذ البرامج في الاستقلال الكامل للكود الثانوي عن نظام التشغيل والأجهزة، مما يسمح لك بتشغيل تطبيقات Java على أي جهاز يوجد به جهاز افتراضي مطابق.

« تبدو "اللغة العالمية" لطيفة، ولكن المشكلة الأكثر شيوعًا هي أيضًا الجانب الآخر من العملة - تسرب الذاكرة في JVM، مما يؤدي إلى تجاوز سعة الذاكرة وتعطلها. فيما يتعلق بهذه المشكلة، لا يمكن استبعاد نقاط الضعف، لأن المبدأ الرئيسي للموثوقية هو أنه كلما كان الأمر أبسط كلما كان ذلك أفضل. في هذه الحالة، يتم تجميع مثل هذه الكعكة المعقدة من ضمان توافق عدد كبير من المنصات وأنظمة التشغيل بحيث يكاد يكون من المستحيل تتبع وإغلاق جميع نقاط الضعف الموجودة فيها والقضاء عليها بسرعة. بالنسبة لمايكروسوفت، يمكن العثور على الثغرات الأمنية وإصلاحها بعد 4-8 سنوات، وهذا لا يأخذ في الاعتبار القدرات غير المعلنة التي تم تركها عن قصد أو عن طريق الخطأ.

من تجربتي: عندما يقوم المبرمجون بإضافة وظيفة جديدة مرتبطة بشيء تم تنفيذه بالفعل، أو إصلاح وظيفة قديمة، فإنهم في 15٪ من الحالات يعطلون منتجًا كان يعمل سابقًا. وإذا لم يتم إجراء الاختبار الكامل، فإن النتيجة النهائية هي منتج بوظائف جديدة، ولكن القديم لا يعمل جزئيًا. هناك أيضًا اختلافات في كتابة التعليمات البرمجية للأنظمة الأساسية وإصدارات أنظمة التشغيل والبرامج المختلفة. وفي هذا الصدد، يمكنك أن تتخيل مدى صعوبة الحفاظ على لغة البرمجة Java وJVM، ناهيك عن القضايا الأمنية.

حاليًا، تم إصدار Java Development Kit 10، والذي يوفر لنا آليات الأمان القياسية التي تم إصدارها لـ Java SE 8 والموضحة في وثائق الأمان. النسخة العاشرة لم تضيف أي جديد.

ألاحظ أن Oracle لديها مركز موارد أمان Java. بشكل عام، تقوم الشركة بتقسيم أمان جافا إلى أربعة أقسام رئيسية:

أ) يجب على المطورين:

مراقبة واستخدام جميع آخر التحديثات التطويرية والأمنية؛

استخدام برامج التحكم في صحة التعليمات البرمجية (على سبيل المثال، Checker Framework)؛

ب) يجب على مسؤولي النظام:

مراقبة واستخدام كافة التحديثات الأخيرة لـ Java والمكونات الضرورية لتشغيل المنتج (بما في ذلك نظام التشغيل والمكتبات وأطر العمل وما إلى ذلك)؛

استخدم قواعد نشر Java الموضحة في و؛

استخدم طابعًا زمنيًا موثوقًا به.

ب) يجب على المستخدمين النهائيين:

استخدم دائمًا أحدث إصدار أصلي من Java؛

د) يحتاج متخصصو الأمن إلى:

استخدام أدوات الإدارة والأمان المتقدمة (على سبيل المثال، وحدة التحكم الإدارية المتقدمة)؛

مراقبة تثبيت كافة التحديثات الأمنية في الوقت المناسب؛

من المهم أن يتبع الجميع ويلتزموا بقواعد ومتطلبات السلامة. لا يمكن تحقيق حالة أمنية على مستوى مناسب إلا معًا وباستخدام جميع التدابير المتاحة (التقنية والتنظيمية). كما تظهر ممارستي، في 60% من المؤسسات، تكون خدمات تكنولوجيا المعلومات وأمن المعلومات جيدة فيما يتعلق بالأمان، وكذلك مع المستخدمين الذين يستخدمون أجهزة الشركة والمتصلين بمجال واحد. لكن الأشخاص الأكثر خروجًا عن السيطرة في هذا المجال هم المطورون وقادة الفرق والمهندسون المعماريون.

تطوير البرمجيات وقضايا الأمن

على نطاق أوسع، الأسباب الرئيسية للمشاكل الأمنية في التطبيقات أثناء تطوير البرمجيات هي ما يلي:

أ) عدم فهم المصطلحات الأمنية بشكل عام، ناهيك عن المعرفة المحددة والحلول التطبيقية.

كقاعدة عامة، يربط المطورون الأمان في أفضل الأحوال بالأشياء التالية: إدارة الوصول والتسجيل وحماية كلمة المرور، وفي كثير من الأحيان - أمان الاتصال على مستوى https (باستخدام آليات التشفير المتوفرة بشكل افتراضي خارج الصندوق). أي أنهم رسميًا سيستخدمون أساليب الأمان، والتي ستبقى في الواقع رسمية "للعرض" دون مراعاة المتطلبات والفروق الدقيقة:

بالنسبة لكلمات المرور: عادةً ما يتم استخدام القيم الافتراضية ولا يتم تكوين الطول والقوة وتكرار التغيير وعدم التكرار وعدد المحاولات بشكل إضافي. في كثير من الأحيان، لا يمكن تعديل هذه المعلمات بشكل أكبر، نظرًا لعدم تضمينها في مهمة نطاق تطوير البرامج، مما يؤدي إلى الحاجة إلى إضافة تعليمات برمجية.

فيما يتعلق بإدارة الوصول والتسجيل: في أفضل الأحوال، وصف المطورون مجموعات المستخدمين أو الأدوار وكائنات الوصول التي يجب أن تكون متاحة في البرنامج. في أسوأ الأحوال، قام المطورون أنفسهم "بتقسيم" الأقسام والكائنات إلى تلك التي يحتاجها المستخدمون والمسؤولون. في الحالة الأولى، نحصل على نظام يمكن تهيئته بمرونة، ولكنه يتطلب قدرًا كبيرًا من الوقت لقضائه في الإعداد والموافقة على الحقوق. في الثانية - نظام رسمي لمراقبة الدخول. بالإضافة إلى ذلك، يحتاج المطورون إلى فهم المعلومات التي يجب تسجيلها وإلى أي مدى. ومع ذلك، غالبًا لا يتم إعطاؤهم هذه المعلومات، مما يؤدي إلى ظهور سجلات غير مفصلة بدرجة كافية للتحقيق في الحوادث أو فهم ما يحدث في البرنامج. أو إلى التخزين المفرط للسجلات وكمية كبيرة من المعلومات، مما يفرض قيودًا كبيرة على القدرة على تخزين المعلومات للفترة الزمنية المطلوبة (على سبيل المثال، سنة إلى ثلاث سنوات) أو أن هناك حاجة لشراء مرافق إضافية لتخزين المعلومات. عندما يتم تسجيل المعلومات بشكل مفرط، تنشأ مشاكل إضافية تتعلق بسرعة التحليل والتحليل للحوادث وسرعة العثور على المعلومات اللازمة. قد يتطلب التكرار أيضًا تمويلًا إضافيًا لزيادة عدد الموظفين، أو شراء أنظمة SIEM مع وضع قواعد فريدة لمعالجة المعلومات، أو قد يؤدي إلى مخاطر مرتبطة بالمعلومات القديمة. وفي الوقت نفسه، يتم قضاء الكثير من الوقت في تحليل المعلومات ومعالجتها.

تعد حماية قنوات الاتصال نقطة مهمة بنفس القدر، خاصة بالنسبة لأنظمة الدفع والمصارف، حيث بالإضافة إلى الكشف عن البيانات الشخصية والخاصة، من الممكن حدوث خسائر مالية. في أغلب الأحيان، يحدث أنهم لا يفكرون في حماية القنوات ووسائط نقل المعلومات، وإذا فعلوا ذلك، فإنهم يستخدمون الإعدادات "الافتراضية"، على سبيل المثال، TLS/SSL. ولكن له أيضًا خصائصه الخاصة فيما يتعلق باختيار إصدار البروتوكول (TLS 1.1 أو 1.2 أو 1.3 أو SSL v1-3)، وخوارزمية التشفير (RC4، أو IDEA، أو Triple DES، أو SEED، أو Camellia أو AES)، وطول المفتاح. في بعض الأحيان، على سبيل المثال، يتم تحديد بروتوكول TLS 1.2 الصحيح، مع تشفير AES، وطول المفتاح 256 بت، ولكن يتم نسيان القدرة على تحديد عنوان على المنفذ 443 لـ HTTPS و/أو المنفذ 80 لـ HTTP، بدلاً من حظر المنفذ 80. مما يؤدي إلى إمكانية الوصول عبر قناة غير آمنة. أو، على سبيل المثال، يقومون برفع البنية التحتية على الأجهزة الافتراضية ولا يفكرون على الإطلاق في الحاجة إلى إغلاق الوصول إلى الشبكة بين الأجهزة الافتراضية.

ب) المشكلة الثانية تتعلق بالأعمال التجارية، لأنها تستثمر الأموال في وظائف خاصة محددة لا تأخذ في الاعتبار الكتل الأمنية.

لسوء الحظ، لا تفهم الشركات دائمًا سبب إنفاق الموارد على الوحدات الأمنية إذا لم تكن لها فائدة وظيفية، ولن يجلب المنتج المزيد من الأموال، وهناك فقط المخاطر المحتملة التي قد لا تنجح. تدرك الشركات في كثير من الأحيان الحاجة إلى الاستثمار في الأمن عند وقوع حادث يتعلق بأمن المعلومات بالفعل.

ولسوء الحظ، فإن هذا ليس خطأ الشركة فحسب، بل خطأ بيئتها أيضًا، والتي:

كما أنه لا يفهم السلامة؛

تم توفير الميزانية المخصصة لمتخصصي أمن المعلومات (لا يتم تعيينهم على الإطلاق، أو يتم تعيين متخصصين ذوي تخصصات عالية، أو يتم تعيين شخص واحد مسؤول عن كل شيء)؛

فشل في نقل الحاجة إلى الأمان بشكل مقنع وتبرير المخاطر الحالية بشكل صحيح (السمعة، المالية، الوقت).

ج) مشكلة في الاتصال في الشركة أو عدمه.

وهذا هو الحال عندما تفهم الشركة وبيئتها الحاجة إلى أمن المعلومات وأهميته. لقد خصصوا الميزانيات ووظفوا المتخصصين المناسبين، ولكن تنشأ صعوبات في التواصل بين وحدات الأعمال وخدمات أمن المعلومات/تكنولوجيا المعلومات والمطورين.

د) قلة وعي المستخدمين العاديين للشركة بقضايا أمن المعلومات.

لنفترض أن هناك كل الوحدات والمتخصصين والإجراءات الفنية والتنظيمية اللازمة. لكن المستخدمين عنيدون ولا يريدون العمل وفقًا للقواعد. يعد هذا موقفًا شائعًا جدًا، ويجب أيضًا حله بشكل شامل، نظرًا لأن الأشخاص لا يفهمون سبب حاجتهم إلى عمل إضافي للامتثال لمشكلات أمن المعلومات (فحص الملفات باستخدام أحد برامج مكافحة الفيروسات، وتذكر كلمات المرور المعقدة، ومعرفة السياسات والإجراءات التجارية والامتثال لها) العمليات، الخ). من الضروري تنظيم دروس رئيسية بشكل دوري، وشرح على المستوى اليومي ما هو أمن المعلومات، وما هي المشاكل والحلول الموجودة، وتوصيل الأهداف والغايات العالمية لأمن المعلومات، وتأثيرها على الأعمال، والتحفيز.

هـ) الافتقار إلى مهندسي أمن المعلومات - لا يشارك المتخصصون في أمن المعلومات دائمًا في تطوير البرمجيات، ويفكر المبرمجون أنفسهم في أمان البنية واستخدام أنماط الأمان المكتوبة والجاهزة.

لا يعرف المطورون ولا يمكنهم معرفة جميع الفروق الدقيقة، لأن مهمتهم هي إكمال التطوير والانتقال إلى المرحلة التالية. إذا تعمقت في التطوير نفسه، فستجد أن العملية أكثر تعقيدًا مما تبدو. لذلك، من الضروري تلقي مهمة من الشركة بوضوح، وتقسيمها إلى مهام صغيرة مفهومة للمطورين، وتنفيذ التطوير، وإجراء اختبار ألفا وبيتا، والتحميل والاختبار الوظيفي، وتصحيح الأخطاء، والعودة إلى الاختبارات - هذه العملية دورية ومنذ فترة طويلة. لذلك، ليس من المستغرب أنهم لا يملكون الموارد الكافية للتفكير في سلامة المنتج بأدق التفاصيل.

لكي نتحدث عن الأمن، يجب حل المشاكل الموضحة أعلاه. أنا لا أصف خيارات الحل على وجه التحديد، لأن كل شيء يعتمد على مشاكل وبيئة وظروف محددة. لا توجد حبوب منع الحمل عالمية ويجب استخدام جميع التدابير الممكنة. وتتمثل المهمة الرئيسية في التأكد من أن جميع موظفي الشركة يفهمون ويفهمون ويلتزمون بمتطلبات أمن المعلومات ويهتمون بالامتثال لها. وعندها فقط سيكون من الممكن الحديث عن الفعالية والمستوى الجيد لنضج أمن المعلومات في الشركة.