الصفحة الرئيسية / حماية / تم إنشاء لغة برمجة جافا. مقدمة لجافا. مزايا Java كلغة برمجة

تم إنشاء لغة برمجة جافا. مقدمة لجافا. مزايا Java كلغة برمجة

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

لفترة طويلة كان من الصعب تخيل مجلة كمبيوتر بدون مقال عن لغة جافا. حتى الصحف والمجلات الشهيرة مثل The New York Times و The Washington Post و Business Week كتبت عنه.

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

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

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

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

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

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

السؤال الواضح هو: كيف تم تحسين لغة جافا؟". اتضح أن هذا لم يتم من خلال تحسين لغة البرمجة نفسها ، ولكن عن طريق التغيير الأساسي لمكتبات البرامج المكتوبة بلغة Java. لقد غيرت شركة Sun Microsystems كل شيء: من أسماء وظائف المكتبة الفردية (مما جعلها ذات معنى أكثر) وطرق تشغيل وحدات الرسوم (عن طريق تغيير طريقة معالجة الأحداث وإعادة كتابة برامج العمال جزئيًا) ، والانتهاء بإنشاء ميزات جديدة للغة ، مثل مرافق الطباعة ، التي لم تكن في 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) ميزة أخرى هي أن إن بناء جملة لغة Java يشبه بناء جملة لغة C ++ ، وبالنسبة للمبرمجين الذين يعرفون لغات C و C ++ ، ليس من الصعب تعلمها. صحيح ، بالنسبة للمبرمجين الذين يعرفون لغة Visual Basic ، قد يكون بناء الجملة هذا غير عادي.

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

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

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

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

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

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

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

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

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

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

بسيط

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

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

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

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

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

وجوه المنحى

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

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

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

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

وزعت

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

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

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

موثوق

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

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

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

آمن

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

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

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

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

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

فيما يلي بعض المواقف التي يمنع حدوثها نظام أمان Java.

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

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

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

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

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

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

العمارة المستقلة

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

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

آلة مستقلة

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

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

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

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

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

مترجم

يمكن إرسال مترجم لغة 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 وقادر على تفسير الرموز الثانوية. تم ترخيص كود مصدر Java بواسطة Sun ، والتي تصر على ثبات اللغة نفسها وهيكل مكتباتها الأساسية. لسوء الحظ ، فإن الواقع ليس كذلك. تدعم الإصدارات المختلفة من متصفحات Netscape و Internet Explorer إصدارات مختلفة من لغة 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 لموازنة التحميل التلقائي ، وتجميع ارتباط قاعدة البيانات ، ومزامنة الكائن ، والإغلاق الآمن وإعادة التحميل ، والعمليات الأخرى المطلوبة لتطبيقات الخادم القابلة للتطوير والتي يكاد يكون من المستحيل تنفيذها بشكل صحيح. وبالتالي ، فإن المبرمجين الذين ينشئون التطبيقات لديهم الفرصة لشراء هذه الآليات المعقدة ، بدلاً من تطويرها بأنفسهم. أدى هذا إلى زيادة إنتاجية المبرمجين - فقد ركزوا على منطق برامجهم ، وليس مشتت انتباههم بالتفاصيل المرتبطة بتشغيل الخوادم.

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

أساسيات برمجة جافا

Java ، كلغة موجهة للكائنات ، تتبع المبادئ الأساسية لـ OOP:

  • ميراث؛
  • تعدد الأشكال؛
  • التغليف.

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

الخصائص

يتم ترجمة الكود في لغة برمجة Java إلى كود ثانوي ثم يتم تنفيذه على الجهاز الظاهري JVM. يتم التحويل إلى الرمز الثانوي في Javac و Jikes و Espresso و GCJ. هناك مترجمون يترجمون لغة C إلى Java bytecode. وبالتالي ، يمكن تشغيل تطبيق C على أي منصة.

تتميز بنية "Java" بما يلي:

  1. يجب أن تبدأ أسماء الفئات بحرف كبير. إذا كان الاسم يتكون من عدة كلمات ، فيجب أن يبدأ الاسم الثاني بأحرف كبيرة.
  2. إذا تم استخدام عدة كلمات لتكوين الطريقة ، فيجب أن تبدأ الثانية بحرف كبير.
  3. تبدأ المعالجة بالطريقة الرئيسية () - فهي جزء من كل برنامج.

أنواع

لغة برمجة جافا لديها 8 أنواع بدائية. يتم عرضها أدناه.

  • Boolean هو نوع منطقي يأخذ قيمتين فقط صواب وخطأ.
  • بايت هو أصغر نوع عدد صحيح بحجم 1 بايت. يتم استخدامه عند العمل مع الملفات أو البيانات الثنائية الأولية. يتراوح من -128 إلى 127.
  • المدى القصير يتراوح من -32768 إلى 32767 ويستخدم لتمثيل الأرقام. حجم المتغيرات من هذا النوع 2 بايت.
  • يشير Int أيضًا إلى الأرقام ، لكن حجمه يبلغ 4 بايت. غالبًا ما يتم استخدامه للعمل مع بيانات عدد صحيح ، ويتم أحيانًا ترقية البايت والبايت القصير إلى int.
  • تستخدم طويلة للأعداد الصحيحة الكبيرة. تتراوح القيم الممكنة من -9223372036854775808 إلى 9223372036854775807.
  • يتم استخدام تعويم ومضاعفة للإشارة إلى الكسور. الفرق بينهما هو أن الطفو مناسب عندما لا تكون الدقة العالية في الجزء الكسري من الرقم مطلوبة.
  • يعرض الخيار Double جميع الأحرف بعد المحدد "." ، ويعويم - الحرف الأول فقط.
  • String هو النوع البدائي الأكثر استخدامًا والذي يتم من خلاله تعريف السلاسل.

الفئات والكائنات

تلعب الفصول الدراسية والكائنات دورًا مهمًا في تعلم لغة برمجة Java للمبتدئين.

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

في Java ، يمكنك إنشاء فئة فرعية ترث طرق الأصل. لهذا ، يتم استخدام الكلمة تمتد:

  • يمتد اسم فئة الفئة superclassname () ؛

المُنشئ هو عضو في أي فئة ، حتى لو لم يتم تعيينه بشكل صريح. في هذه الحالة ، يقوم المترجم بإنشائه من تلقاء نفسه:

  • فئة عامة (فئة عامة () () فئة عامة (اسم سلسلة) ())

اسم المُنشئ هو نفسه اسم الفئة ، افتراضيًا يحتوي على معلمة واحدة فقط:

  • جرو عام (اسم سلسلة)

يتم إنشاء كائن من فئة باستخدام عامل التشغيل الجديد ():

  • النقطة ع = نقطة جديدة ()

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

    النقطة ع = نقطة جديدة ()

    فئة TwoPoints (

    الرئيسية العامة الثابتة الفراغ (سلاسل سلسلة) (

    النقطة p1 = نقطة جديدة () ؛

    النقطة p2 = نقطة جديدة () ؛

    متغيرات الكائن والكائنات هي كيانات مختلفة تمامًا. متغيرات الكائن هي روابط. يمكنهم الإشارة إلى أي متغير من نوع غير بدائي. على عكس C ++ ، يتم تنظيم تحويل النوع بشكل صارم.

    الحقول والطرق

    الحقول كلها متغيرات مرتبطة بفئة أو كائن. إنها محلية بشكل افتراضي ولا يمكن استخدامها في فئات أخرى. يتم استخدام عامل التشغيل "." للوصول إلى الحقول:

    • متغير classname

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

    نفذت القدرة على استيراد المتغيرات للوصول من الحزم الأخرى:

    • استيراد اسم فئة ثابتة ؛

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

    • فئة نقطة (int x ، y ؛

      الحرف الأول الباطل (int a، int b) (

    في المثال أعلاه ، تحتوي فئة النقطة على عدد صحيح x و y ، وهي طريقة init (). يتم الوصول إلى الطرق ، تمامًا مثل المتغيرات ، باستخدام عامل التشغيل ".":

    • point.init () ؛

    لا تقوم خاصية init بإرجاع أي شيء ، لذا فهي من النوع void.

    المتغيرات

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

    يمكن الإعلان عن عدة متغيرات في نفس الوقت. يتم استخدام الفاصلة لسردهم:

    • إنت أ ، ب ، ج ؛

    تتم التهيئة بعد أو أثناء الإعلان:

    الباحث أ = 10 ، ب = 10 ؛

    هناك عدة أنواع:

    • المتغيرات المحلية (المحلية) ؛
    • متغيرات الحالة (متغيرات الحالة) ؛
    • المتغيرات الثابتة (ثابت).

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

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

    • أرقام - 0 ؛
    • المنطق - خطأ
    • المراجع لاغية.

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

    • أخير؛
    • نشر؛
    • عامة.

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

    • ClassName.VariableName.

    جامع القمامة

    في البرنامج التعليمي بلغة Java Programming Language للمبتدئين ، يعتبر قسم جامع القمامة الأوتوماتيكي هو الأكثر إثارة للاهتمام.

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

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

    الصفات التعريفية

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

    المعدل المحمي مماثل في العمل للجمهور - فهو يفتح الوصول إلى حقول الفصل. في كلتا الحالتين ، يمكن استخدام المتغيرات في فئات أخرى. لكن المُعدِّل العام متاح للجميع تمامًا ، والمُعدِّل المحمي متاح فقط للفئات الموروثة.

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

    نهائي للحقول يجعل من المستحيل تغيير القيمة الأولى للمتغير:

      mthod public static void (String args) (

      اسم الباحث النهائي = 1 ؛

      int Name = 2 ؛ // سيرمي خطأ

    المتغيرات ذات المعدل النهائي هي ثوابت. عادة ما تكون مكتوبة بأحرف كبيرة فقط. CamelStyle وطرق أخرى لا تعمل.

    يشير نهائي طرق إلى حظر تغيير طريقة في فئة موروثة:

      myMethod () باطل نهائي (

      System.out.printIn ("Hello world") ؛

    يعني النهائي للفئات أنه لا يمكنك إنشاء أحفاد الفصل:

      فئة عامة نهائية (

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

    المنصات والإصدارات

    عائلات لغات برمجة Java الموجودة:

    • طبعة قياسية.
    • إصدار المؤسسة.
    • مايكرو ايديشن.
    • بطاقة.

    1. SE - هو العنصر الرئيسي ، ويستخدم على نطاق واسع لإنشاء تطبيقات مخصصة للاستخدام الفردي.
    2. EE عبارة عن مجموعة من المواصفات لتطوير برامج المؤسسة. يحتوي على ميزات أكثر من SE ، لذلك يتم استخدامه على نطاق تجاري في المؤسسات الكبيرة والمتوسطة الحجم.
    3. ME - مصمم للأجهزة ذات الطاقة والذاكرة المحدودين ، وعادة ما يكون لها حجم شاشة صغير. هذه الأجهزة هي الهواتف الذكية وأجهزة المساعد الرقمي الشخصي وأجهزة الاستقبال تلفزيون رقمي.
    4. البطاقة - مصممة للأجهزة ذات موارد الحوسبة المحدودة للغاية ، مثل البطاقات الذكية وبطاقات sim وأجهزة الصراف الآلي. لهذه الأغراض ، تم تغيير الرمز الثانوي ومتطلبات النظام الأساسي ومكونات المكتبات.

    تطبيق

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

    تستخدم بنشاط لتطبيقات Android. يتم تجميع البرنامج في رمز ثنائي غير قياسي ويتم تنفيذه على الجهاز الظاهري ART. يستخدم Android Studio للتجميع. IDE هذا من Google هو IDE الرسمي لتطوير Android.

    طورت Microsoft تطبيقها الخاص لـ Java Virtual Machine MSJVM. كان لديها مثل هذه الاختلافات التي حطمت المفهوم الأساسي للمنصة المشتركة - لم يكن هناك دعم لبعض التقنيات والأساليب ، كانت هناك امتدادات غير قياسية تعمل فقط على نظام Windows الأساسي. أصدرت Microsoft لغة J # ، التي يشبه تركيبها وعمليتها بشكل عام Java. لم يتوافق مع المواصفات الرسمية وتمت إزالته في النهاية من مجموعة أدوات مطور Microsoft Visual Studio القياسية.

    لغة البرمجة جافا والبيئة

    يتم تطوير البرمجيات في IDEs التالية:

    1. NetBeans IDE.
    2. كسوف IDE.
    3. IntelliJ IDEA.
    4. ي المطوِّر.
    5. Java لنظام iOS.
    6. جني.

    يتم توزيع JDK بواسطة Oracle كمجموعة تطوير Java. يشمل المترجم والمكتبات القياسية والمرافق والنظام التنفيذي. تعتمد بيئات التطوير المتكاملة الحديثة على JDK.

    من الملائم كتابة التعليمات البرمجية بلغة برمجة Java في Netbeans و Eclipse IDE. هذه بيئات تطوير متكاملة مجانية ، وهي مناسبة لجميع أنظمة Java الأساسية. تستخدم أيضًا للبرمجة في Python و PHP و JavaScript و C ++.

    يتم توزيع IntelliJ IDE من Jetbrains في نسختين: مجاني وتجاري. يدعم كتابة التعليمات البرمجية في العديد من لغات البرمجة ، وهناك مكونات إضافية لجهات خارجية من مطورين ينفذون المزيد من PLs.

    JDeveloper هو تطور آخر من Oracle. مكتوب بالكامل بلغة جافا ، لذا فهو يعمل على جميع أنظمة التشغيل.

مقدمة

تم تخصيص هذا العمل لواحدة من أكثر لغات البرمجة الواعدة اليوم - لغة جافا. يمكن تسمية التكنولوجيا المسماة "Java" ، بدون مبالغة ، بأنها تقنية ثورية في صناعة تطوير البرمجيات.

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

لتنفيذ المهمة ، تم اقتراح خوارزمية لكتابة البرنامج. علاوة على ذلك ، تم تنفيذ هذه الخوارزمية في Java.

وصف لغة البرمجة جافا

الخصائص العامة لجافا

تم اختيار لغة جافا لكتابة برنامج الفرز. Java هي لغة برمجة موجهة للكائنات طورتها شركة Sun Microsystems منذ عام 1991 وتم إصدارها رسميًا في 23 مايو 1995. في البداية ، كانت لغة البرمجة الجديدة تسمى Oak (James Gosling) وتم تطويرها للإلكترونيات الاستهلاكية ، ولكن تم تغيير اسمها لاحقًا إلى Java وبدأ استخدامها لكتابة التطبيقات والتطبيقات وبرامج الخادم.

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

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

ميزة أخرى لا تقل أهمية عن Java هي تشابهها الكبير مع لغة البرمجة C ++. لذلك ، بالنسبة لأولئك المبرمجين الذين هم على دراية بصيغة C و C ++ ، سيكون من السهل تعلم Java.

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

من المهم أيضًا أن يكون تطوير البرامج في Java التي لا تحتوي على أخطاء أسهل بكثير مما هو عليه في C ++.

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

لهذا تم القيام بما يلي:

لقد ألغى المطورون إمكانية تخصيص الذاكرة وتحريرها بشكل صريح.

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

إدخال المصفوفات الصحيحة وحظر المؤشرات.

الآن لا يمكن للمبرمجين محو البيانات من الذاكرة بسبب الاستخدام غير الصحيح للمؤشرات.

تم استبعاد إمكانية الخلط بين عامل التخصيص وعامل المقارنة من أجل المساواة. كقاعدة عامة ، غالبًا ما تؤدي مشكلة علامة "=" إلى أخطاء منطقية في C و C ++ ، والتي يصعب اكتشافها. خاصة في البرامج الكبيرة.

يتم استبعاد الميراث المتعدد تمامًا. تم استبداله بمفهوم جديد - واجهة ، تم استعارة فكرتها من لغة الهدف C.

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

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

جافا ومايكروسوفت

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

دلائل الميزات

مثال البرنامج

البرنامج الذي يطبع "Hello، World!":

فئة عامة HelloWorld (عامة ثابتة باطلة رئيسية (String args) (System .out .println ("Hello، World!")؛))

مثال على استخدام القوالب:

استيراد java.util. * ؛ عينة فئة عامة (عامة ثابتة باطلة رئيسية (سلاسل سلسلة) ( // إنشاء كائن من قالب.قائمة سلاسل = LinkedList جديدة () ؛ strings.add ("مرحبًا") ؛ strings.add ("العالم") ؛ strings.add ("!") ؛ لـ (String s: strings) (System .out .print (s) ؛ System .out .print ("") ؛)))

الأفكار الرئيسية

أنواع بدائية

لا يوجد سوى 8 أنواع عددية في لغة جافا: منطقية ، بايت ، شار ، قصير ، int ، طويل ، عائم ، مزدوج.

فئات الغلاف للأنواع البدائية

يتم تحديد أطوال ونطاقات القيمة للأنواع الأولية من خلال المعياروليس التنفيذ ويرد في الجدول. تم إنشاء نوع char ثنائي البايت لتسهيل الترجمة (أحد المبادئ الأيديولوجية لجافا): عندما تم تشكيل المعيار ، كان Unicode-16 موجودًا بالفعل ، ولكن ليس Unicode-32. نظرًا لعدم وجود نوع بايت واحد في النتيجة ، تمت إضافة نوع بايت جديد. يمكن أن يكون للأنواع float و double قيم خاصة وليست رقمًا (

اكتب الطول (بالبايت) نطاق أو مجموعة من القيم
قيمة منطقية غير معرف خطأ صحيح
بايت 1 −128..127
شار 2 0..2 16-1 أو 0..65535
قصيرة 2 −2 15 ..2 15-1 أو 32768..32767
int 4 −2 31 ..2 31-1 أو 2147483648..2147483647
طويل 8 −2 63 ..2 63-1 ، أو ما يقرب من 9.2 10 18 ..9.2 10 18
يطفو 4 - (2-2 -23) 2127 .. (2-2 -23) 2127 ، أو ما يقرب من 3.4 10 38 ..3.4 10 38 ، وكذلك ، NaN
مزدوج 8 - (2-2 -52) 2 1023 .. (2-2 -52) 2 1023 ، أو تقريبًا −1.8 10308 ..1.8 10308 ، وأيضًا ، NaN

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

التحولات في العمليات الحسابية

لغة Java لها القواعد التالية:

  1. إذا كان أحد المعاملين من النوع double ، فسيتم تحويل الآخر أيضًا إلى نوع double.
  2. وإلا ، إذا كان أحد المعاملين من النوع float ، فسيتم تحويل الآخر أيضًا إلى نوع float.
  3. وإلا ، إذا كان أحد المعاملين طويلاً ، فسيتم تحويل المعامل الآخر أيضًا إلى كتابة طويلة.
  4. خلاف ذلك ، يتم تحويل كلا المعاملين إلى نوع int.

تميز القاعدة الأخيرة Java عن التطبيقات القديمة و C ++ وتجعل الكود أكثر أمانًا. لذلك ، على سبيل المثال ، بلغة جافا ، بعد تنفيذ الكود

قصير x = 50 ، y = 1000 ؛ int z = x * y ؛

يتم تعيين قيمة المتغير z 50000 ، وليس 15536 ​​، كما هو الحال في معظم تطبيقات C و C ++ التي عفا عليها الزمن بشكل ميؤوس منه. في برنامج تم تجميعه بواسطة MS VC ++ منذ الإصدار 7 ، بالإضافة إلى العديد من المجمعات الحديثة الأخرى (gcc ، Intel C ++ ، Borland C ++ ، Comeau ، إلخ) ، ستكون القيمة أيضًا 50000.

متغيرات الكائن والكائنات والمراجع والمؤشرات

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

مزدوج أ [10] [20] ؛ فو ب (30) ؛

مزدوج أ = مزدوج جديد [10] [20] ؛ Foo b = new Foo (30) ؛

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

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

  • لا يمكنك تحويل كائن من النوع int أو أي نوع بدائي آخر إلى مؤشر أو مرجع ، والعكس صحيح.
  • يمنع إجراء عمليات ++ أو −− أو + أو - أو أي عمليات حسابية أخرى على الروابط.
  • يتم تنظيم تحويل النوع بين المراجع بشكل صارم. باستثناء مراجع المصفوفات ، يُسمح فقط بتحويل المراجع بين النوع الموروث وما يتبعه ، ويجب تحديد التحويل من النوع الموروث إلى النوع الموروث بشكل صريح والتحقق منه للتأكد من دقته في وقت التشغيل. يُسمح بتحويلات مرجع المصفوفة فقط عندما يُسمح بالتحويلات من أنواعها الأساسية ولا توجد تعارضات في الأبعاد.
  • في Java ، لا توجد عمليات أخذ العنوان (&) أو أخذ العنوان (*). علامة النجمة في Java تعني الضرب ، هذا كل ما في الأمر. علامة العطف (&) تعني فقط "أحادي المعامل" و (علامة العطف المزدوجة هي "منطقية و").

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

روابط مكررة واستنساخ

نظرًا لأن متغيرات الكائن هي متغيرات مرجعية ، فإن التعيين لا ينسخ الكائن. لذا ، إذا كتبت

فو فو ، بار ؛ ... شريط = فو ؛

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

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

جمع القمامة

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

الفئات والوظائف

Java ليست لغة إجرائية: أي وظيفة يمكن أن توجد فقط داخل الفصل. يتم التأكيد على ذلك من خلال مصطلحات لغة Java ، حيث لا توجد مفاهيم "الوظيفة" أو "وظيفة العضو" (Eng. وظيفة العضو)، لكن فقط طريقة. أصبحت الوظائف القياسية أيضًا طرقًا. على سبيل المثال ، لا توجد دالة sin () في Java ، ولكن هناك طريقة Math.sin () لفئة الرياضيات (التي تحتوي على ، بالإضافة إلى sin () ، cos () ، exp () ، sqrt () ، القيمة المطلقة () والعديد من الطرق الأخرى).

الأساليب والمجالات الثابتة

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

مزدوج x = Math .sin (1) ؛

Math m = new Math () ؛ مزدوج x = m.sin (1) ؛

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

الحقول الثابتة لها نفس المعنى كما في C ++: يوجد مثيل واحد فقط لكل منها.

النهائية

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

التجريد

في Java ، الطرق التي لم يتم التصريح عنها صراحة بأنها نهائية أو خاصة هي افتراضية في مصطلحات C ++: استدعاء طريقة معرّفة بشكل مختلف في الصنفين الأساسي والوراثي يكون له دائمًا فحص وقت التشغيل.

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

واجهات

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

في جافا لا يمكن للفئة أن ترث أكثر من فئة واحدة، ولكن يمكنها تنفيذ أي عدد من الواجهات.

يمكن تمرير الواجهات إلى الأساليب كمعلمات ، لكن لا يمكن إنشاء كائنات من أنواعها.

واجهات ماركر

هناك بعض الواجهات في Java لا تحتوي على طرق يتم تنفيذها ، ولكن يتم التعامل معها بطريقة خاصة بواسطة JVM. هذه هي الواجهات:

  • java.lang.cloneable
  • java.io.Serializable
  • java.rmi.Remote

القوالب في Java (Genics)

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

// إعلان فئة عامفئة GenericClass (E getFirst () (...) إضافة باطلة (E obj) (...)) // استخدام فئة عامة في الكود GenericClass var = GenericClass جديد () ؛ var.add ("qwerty") ؛ السلسلة p = var.getFirst () ،

يُسمح بالإعلان العام عن الفئات والواجهات والأساليب. بالإضافة إلى ذلك ، يدعم بناء الجملة إعلانات محدودة لأنواع المعلمات: إشارة في الإعلان عن بناء النموذج يتطلب معلمة النوع T لتنفيذ الواجهات A و B و C وما إلى ذلك ، والبناء يتطلب أن تكون معلمة النوع T من النوع C أو أحد أسلافها.

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

التحقق من عضوية الفصل الدراسي

في Java ، يمكنك التحقق صراحةً من الفئة التي ينتمي إليها الكائن. يكون التعبير foo exampleof Foo صحيحًا إذا كان الكائن foo ينتمي إلى الفئة Foo أو تابع لها ، أو يطبق واجهة Foo (أو بشكل عام ، يرث فئة تنفذ واجهة يرثها Foo).

بعد ذلك ، تقوم دالة getClass () المحددة لجميع الكائنات بإرجاع كائن من النوع Class. يمكن مقارنة هذه الأشياء. لذلك ، على سبيل المثال ، foo.getClass () == bar.getClass () سيكون صحيحًا إذا كان الكائنان foo و bar ينتميان إلى نفس الفئة تمامًا (ولكن هذا لا يعني أنهما كائنان متطابقان).

بالإضافة إلى ذلك ، يمكن الحصول على كائن من نوع Class من أي نوع مثل هذا: Integer.class ، Object.class.

ومع ذلك ، فإن المقارنة المباشرة للفئات ليست دائمًا أفضل وسيلة للتحقق من عضوية الفصل. غالبًا ما يتم استخدام الدالة isAssignableFrom () بدلاً من ذلك. يتم تعريف هذه الوظيفة على كائن من النوع Class وتأخذ كائن من النوع Class كمعامل. وبالتالي ، فإن استدعاء Foo.class.isAssignableFrom (Bar.class) سيعيد صحيحًا إذا كان Foo هو أحد أسلاف فئة Bar. نظرًا لأن جميع الكائنات منحدرة من النوع Object ، فإن استدعاء Object.class.isAssignableFrom () سيعود دائمًا إلى true. جنبا إلى جنب مع الوظائف المذكورة لكائن من النوع Class ، يتم أيضًا استخدام الدالتين isInstance () (مكافئ لـ exampleof) و cast () (يحول معلمة إلى كائن من الفئة المحددة).

مكتبات الفصل

أدوات تطوير البرمجيات

  • JDK - بالإضافة إلى مجموعة المكتبات لأنظمة Java SE و Java EE ، فهي تحتوي على مترجم سطر الأوامر javac ومجموعة من الأدوات المساعدة التي تعمل أيضًا في وضع سطر الأوامر.
  • NetBeans IDE هو IDE مجاني لجميع أنظمة Java الأساسية - Java ME و Java SE و Java EE. تم الترويج لها بواسطة Sun Microsystems ، مطور Java ، كأساس لتطوير البرامج في Java واللغات الأخرى (، C ++ ، Fortran ، إلخ).
  • Java SE و Java EE. يجري العمل الآن لدعم منصة Java ME في Eclipse. يتم الترويج لـ C و C ++ و Fortran وما إلى ذلك.)
  • IntelliJ IDEA هي بيئة تطوير تجارية لمنصات Java SE و Java EE و Java ME.

ملاحظات

  1. جافا (الإنجليزية). قاموس ميريام وبستر على الإنترنت. ميريام وبستر. - نطق كلمة جافا باللغة الإنجليزية. تم الاسترجاع 5 يونيو ، 2009.
  2. روبرت تولكسدورف.لغات البرمجة لـ Java Virtual Machine JVM. هي شركة Research GmbH. - كتالوج على الإنترنت للغات البديلة وامتدادات اللغة لـ JVM. تم الاسترجاع 5 يونيو ، 2009.
  3. دعم Microsoft Java Virtual Machine. مايكروسوفت (2003-09-12). - بيان Microsoft الرسمي حول برنامج دعم MSJVM. تم الاسترجاع 5 يونيو ، 2009.
  4. تود هوفهندسة أمازون (إنجليزي) (2007-09-18). - مناقشة معمارية أمازون باستخدام تقنيات جافا. تم الاسترجاع 6 يونيو ، 2009.
  5. Amazon Elastic Compute Cloud (Amazon EC2). أمازون ويب سيرفيسيز ذ. - وصف تقنية وقدرات Amazon EC2 كخدمة ويب. تم الاسترجاع 6 يونيو ، 2009.
  6. تود هوف eBay Architecture (الإنجليزية) (27 مايو 2008). - مناقشة معمارية eBay على منصة Java. تم الاسترجاع 6 يونيو ، 2009.
  7. راندي شوب ودان بريتشيتهندسة eBay (الإنجليزية) (PDF). منتدى SD 2006(2006-11-29). - عرض تقديمي عن تاريخ تطوير العمارة في eBay. تم الاسترجاع 6 يونيو ، 2009.
  8. ألين ستيرنمقابلة حصرية مع إيليا سيغالوفيتش كبير مسؤولي التكنولوجيا في Yandex (الإنجليزية). CenterNetworks (2008-01-14). - مقابلة مع إيليا سيغالوفيتش ، كبير مسؤولي التكنولوجيا في Yandex. تم الاسترجاع 6 يونيو ، 2009.
  9. أناتولي أورلوفهندسة Yandex.Search (الروسية) (PowerPoint). مواد اجتماع JUG في يكاترينبورغ(2008-05-24). تم الاسترجاع 6 يونيو ، 2009.
  10. بريان جوانمدونة LinkedIn. ارشيف المدونة. جريلز في لينكد إن. (إنجليزي) . LinkedIn.com (2008-06-11). - تاريخ إنشاء نظام LinkedIn بناءً على تقنية Grails Java. تم الاسترجاع 5 يونيو ، 2009.
  11. إجراءات OracleJVM و Java المخزنة. Oracle Inc .. - قسم من Oracle Portal مخصص لتقنيات Java كجزء من خادم Oracle DBMS. تم الاسترجاع 5 يونيو ، 2009.
  12. ارتباط بالوثائق الخاصة بأسلوب Object.clone ()

المؤلفات

  • موناخوف فاديملغة برمجة Java و NetBeans Environment ، الإصدار الثاني. - سانت بطرسبرغ.: "BHV-Petersburg" ، 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • جوشوا بلوخ.جافا. البرمجة الفعالة = جافا فعالة. - م: "لوري" ، 2002. - س 224. - ردمك 5-85582-169-2
  • Java 2. Professional's Library ، المجلد 1. الأساسيات = Core Java ™ 2 ، المجلد الأول - الأساسيات. - الطبعة السابعة. - م: "ويليامز" ، 2007. - ص 896. - ردمك 0-13-148202-5
  • كاي إس هورستمان ، غاري كورنيل. Java 2. مكتبة المحترفين ، المجلد 2. إرشادات البرمجة = Core Java ™ 2 ، المجلد الثاني - الميزات المتقدمة. - الطبعة السابعة. - م: "ويليامز" ، 2007. - ص 1168. - ردمك 0-13-111826-9
  • بروس إيكل.فلسفة جافا = التفكير في جافا. - الطبعة الثالثة - سانت بطرسبرغ: "Piter" ، 2003. - S. 976. - ISBN 5-88782-105-1
  • هربرت شيلدت ، جيمس هولمز.فن برمجة جافا = فن جافا. - م: "ديالكتيك" ، 2005. - ص 336. - ردمك 0-07-222971-3
  • لوبوس بروجا. Quick Java: دورة تدريبية عملية سريعة = Luboš Brůha. Java Hotová řešení .. - M.: Science and Technology، 2006. - P. 369. - ISBN 5-94387-282-5

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

تُترجم برامج Java إلى كود ثنائي ، يتم تنفيذه بواسطة Java Virtual Machine (JVM) ، وهو برنامج يعالج كود البايت ويمرر التعليمات إلى الجهاز كمترجم.

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

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

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

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

الأجهزة التي توفر معالجة سريعة للرمز الثنائي (على سبيل المثال ، تقنية Jazelle ، المدعومة من قبل بعض معالجات ARM).



السمات الرئيسية للغة:

إدارة الذاكرة التلقائية ؛

قدرات موسعة للتعامل مع المواقف الاستثنائية ؛

مجموعة غنية من أدوات تصفية الإدخال / الإخراج ؛

مجموعة من المجموعات القياسية مثل المصفوفة والقائمة والمكدس وما إلى ذلك ؛

توافر أدوات بسيطة لإنشاء تطبيقات الشبكة (بما في ذلك استخدام بروتوكول RMI) ؛

وجود الفئات التي تسمح لك بإجراء طلبات HTTP ومعالجة الاستجابات ؛

أدوات لغة مدمجة لإنشاء تطبيقات متعددة الخيوط ؛

الوصول الموحد إلى قاعدة البيانات:

على مستوى استعلامات SQL الفردية - بناءً على JDBC و SQLJ ؛

على مستوى مفهوم الكائنات مع القدرة على التخزين في قاعدة بيانات - استنادًا إلى Java Data Objects و Java Persistence API ؛

دعم القوالب (بدءًا من الإصدار 1.5) ؛

التنفيذ المتوازي للبرامج.

1.4.3 لغة البرمجة C #

في يونيو 2000 ، أصبح معروفًا بلغة برمجة جديدة ولدت في أحشاء Microsoft. أصبح جزءًا تكنولوجيا جديدةمايكروسوفت تسمى .NET (وضوحا "دوت نت"). في إطار هذه التقنية ، يتم توفير بيئة تنفيذ واحدة للبرامج (Common Language Runtime ، CLR) المكتوبة بلغات برمجة مختلفة. إحدى هذه اللغات ، وهي اللغة الرئيسية في هذه البيئة ، هي C # (C # ، يُقرأ "C حاد" ، "C حاد"). من خلال اسم اللغة ، بالطبع ، أرادوا التأكيد على علاقتها بـ C ++ ، لأن # هو اثنان من الإيجابيات المتقاطعة. ولكن الأهم من ذلك كله ، أن اللغة الجديدة تشبه لغة جافا. ولا شك أن أحد أسباب ظهوره كان رغبة مايكروسوفت للرد على تحدي صن.

على الرغم من عدم تسمية مؤلفي C # رسميًا ، في صفحة العنوان لإحدى الإصدارات الأولية من دليل اللغة ، يُشار إلى Anders Hejlsberg ، مبتكر Turbo Pascal و Delphi ، الذي انتقل إلى Microsoft في عام 1996 ، وسكوت ويلتاموث.

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

أولاً ، على عكس JVM ، فإن IL غير مرتبط بلغة برمجة واحدة. تتضمن الإصدارات الأولية من Microsoft.NET برامج التحويل البرمجي لـ C ++ و C # و Visual Basic. يمكن للمطورين المستقلين إضافة لغات أخرى عن طريق إنشاء مجمعات من تلك اللغات إلى كود IL.

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

"C # هي لغة موجهة للكائنات بسيطة وحديثة وآمنة من النوع مشتقة من C و C ++. سيكون C # مناسبًا ومفهومًا للمبرمجين الذين يعرفون C و C ++. تجمع C # بين إنتاجية Visual Basic وقوة C ++. " تبدأ هذه الكلمات في وصف C #.

انصح ميزات تقنيةلغة:

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

تنظم مساحات الأسماء (مساحة الاسم) رؤية كائنات البرنامج (كما في C ++). يمكن أن تتداخل مساحات الأسماء. يُسمح باستخدام كائنات البرنامج دون تحديد مساحة الاسم التي ينتمي إليها هذا الكائن بشكل صريح. يكفي مجرد ذكر عام لاستخدام مساحة الاسم هذا في توجيه الاستخدام (كما في Turbo Pascal). توجد أسماء مستعارة لأسماء مساحات الاسم في توجيه الاستخدام (كما هو الحال في لغة أوبيرون) ؛

أنواع البيانات الأولية: 8 بت (بايت ، بايت) ، 16 بت (قصير ، قصير) ، 32 بت (int ، uint) ، و 64 بت (طويل ، ulong) أعداد صحيحة موقعة وغير موقعة ، حقيقية واحدة (عائمة) والدقة المزدوجة (المزدوجة) ، أحرف Unicode (char) ، النوع المنطقي (bool ، غير متوافق مع الأعداد الصحيحة) ، النوع العشري الذي يوفر 28 رقمًا مهمًا من الدقة (عشري) ؛

الأنواع المهيكلة: الفئات والواجهات (كما هو الحال في Java) ، المصفوفات أحادية البعد والمتعددة الأبعاد (على عكس Java) ، السلاسل (السلسلة) ، الهياكل (تقريبًا نفس الفئات ، ولكن ليس على الكومة وبدون وراثة) ، التعدادات ، غير متوافقة مع الأعداد الصحيحة (كما في باسكال) ؛

أنواع المندوبين أو ببساطة "المفوضين" (مثل الأنواع الإجرائية في الوحدة 2 و Oberon ، مؤشرات الوظيفة في C و C ++) ؛

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

جمع القمامة الأوتوماتيكي (كما في أوبيرون وجافا) ؛

مجموعة واسعة من العمليات مع 14 مستوى أولوية. إعادة تعريف العمليات (كما في Algol-68 ، Ada ، C ++). باستخدام عوامل التشغيل المحددة وغير المحددة ، يمكنك التحكم في التحكم في التدفق الزائد عند إجراء عمليات على أعداد صحيحة ؛

الطرق مع معلمات القيمة والمعلمات المرجعية (المرجع) ومعلمات الإخراج (الخروج). يجب كتابة الكلمات ref and out قبل المعلمة ، ليس فقط في وصف الطريقة ، ولكن أيضًا عند الاستدعاء. يسمح لك وجود معلمات الإخراج بالتحكم في تنفيذ تحديد المهام. وفقًا لقواعد اللغة ، يجب ضمان أن يكون لأي متغير قيمة قبل محاولة استخدامه ؛

عبارات التحكم: if، switch، while، do، for، break، continue (كما في C و C ++ و Java). تعليمة foreach ، التي تمر عبر كل عنصر من عناصر "المجموعة" ، عدة أنواع من تعليمة goto jump ؛

معالجة الاستثناءات (كما في Java) ؛

الخصائص - عناصر الفئات (الكائنات) ، يتم الوصول إليها بنفس طريقة الحقول (يمكنك تعيين قيمة أو الحصول عليها) ، ولكن يتم تنفيذها من خلال الإجراءات الفرعية التي تسمى ضمنيًا get and set (كما في Object Pascal - لغة الإدخال نظام دلفي) ؛

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

الأحداث هي عناصر من فئات (حقول أو خصائص) من نوع إجرائي (مفوضون) ، والتي ، خارج الفصل حيث تم تعريفها ، تنطبق فقط + = و - = العمليات ، مما يسمح لك بإضافة أو إزالة طرق معالج الأحداث للكائنات من هذه الفئة

يتم ترجمة التعليمات البرمجية غير الآمنة (غير الآمنة) باستخدام المؤشرات وحساب العنوان في أجزاء من البرنامج تم تمييزها باستخدام المُعدِّل غير الآمن ؛

المعالج الأولي ، على عكس C و C ++ ، يوفر فقط تسهيلات الترجمة الشرطية.

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

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

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

وبالطبع ، ترتبط احتمالات C # بشكل أساسي بالجهود التي ستبذلها Microsoft بالطبع للترويج لها.