الفئات والكائنات في لغة الجافا

الفئات Classes

هو حجر الزاوية في لغة الجافا حيث تعتبر الفئات الوحدات الأساسية في لغة البرمجة الكائنية نظرا لما تحتويه  Classes الفئات من كائنات و طرق وبيانات.

تعريف الفئه

الفئة هي القالب البرمجي للغة الجافا الذي يحدد شكل الكائنات لما تحتويه من بيانات و معاملات والكائن ينتمي للفئه وليس العكس
وبالتالي للفئة عناصر منها المتغيرات و النهج (الدوال –الطرق)
إذا الفئه هي كالمستودع الذي يستطيع المبرمجون ان يجمعوا فيه البيانات و الطرق ( الدوال) تحت سقف واحد.

إنشاء الفئات

يتم إنشاء الفئات بإستخدام الكلمة المفتاحية class وهي من الكلمات المحجوزة في الجافا ويكون الشكل العام للفئة كما يلي :

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

العلاقة بين الفئات Relational between Classes

من أشهر العلاقات بين الفئات هي :
-الإعتماد  "يستخدم-واحد" (uses–a).
-التجميع "تمتلك –واحد" ( has–a).
-الميراث "هو –واحد" (is–a).

الإعتماد (يستخدم –واحد )

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

الميراث(هو-واحد)

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

استخدام فئات معرفه مسبقا

لايمكن القيام باي شيء  في الجافا من دون استخدام الفئات, وانت بالفعل رأيت العديد من الفئات او تعاملت معها أثناء عملك .ومع ذلك لم يظهر لك جميع الميزات النموذجيه او التقليديه لكائنات التوجه. 

على سبيل المثال ، فئة الرياضيات  'Math class' يمكن استخدام أساليب او طرق (method) لفئة الرياضيات، مثل Math.random،من دون الحاجة إلى معرفة كيف يتم تنفيذها, فقط ماتحتاج اليه هو معرفة الاسم والمعلمات (parameters) إن وجدت .

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

طرق خاصة

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

طريقة main

لاحظ أنه يمكنك استدعاء اساليب ساكنة من دون أي الكائنات. على سبيل المثال، أبدا لا تشييد أي كائنات من فئة الرياضيات للاتصال ب Math.pow. لنفس السبب، طريقة main هو اسلوب ساكن.
public class Application
{
(public static void main(String[] args
{
// construct objects here
. . .
}
}
الطريقة main لا تعمل على أي الكائنات. في الواقع، عندما يبدأ البرنامج،  ليست هناك أي كائنات حتى الان. ينفذ static main، ويبني الكائنات التي 
يحتاج اليها البرنامج.

تشييد الكائن

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