#معلومة سلام الله عليكم واسعد الله مسائكم بكل خير.
موضوعنا اليوم خفيف ومهم لمعرفة كيف تخزين لغة جافا وبعض اللغات المشابهه المتغيرات في الذاكرة :
هناك نوعين من المتغيرات في البرمجة وهي المتغيرات الاولية(primitive) و المتغيرات المرجعية(Referenced).
• في لغة جافا يتم تخزين المتغيرات الأولوية في منطقة في الذاكرة تسمى Stack وتخزن فيها القيم الفعلية للمتغيرات و القيم الافتراضية للأرقام 0، وللمنطقية false،وللأحرف u0000\ وهي اسرع في الوصول الى القيم وحجمها ثابت.
مثل: int, double, char, boolean.
• تخزين الكائنات والمتغيرات المرجعية في منطقة تسمى Heap وتخزن فيها عنوان الذاكرة وتخزن فيها القيم الافتراضية للكائنات، الString، المصفوفات، Interfaces. وهي بطيئة في الوصل الى البيانات وذلك لانها تخزن عناوين المتغيرات وليس القيم الفعلية مثل stack وايضا حجمها متغير ويعتمد على الكائن.
واذا اردنا انشاء متغير من هذا النوع نستخدم الكلمة المفتاحية new.
موضوعنا اليوم خفيف ومهم لمعرفة كيف تخزين لغة جافا وبعض اللغات المشابهه المتغيرات في الذاكرة :
هناك نوعين من المتغيرات في البرمجة وهي المتغيرات الاولية(primitive) و المتغيرات المرجعية(Referenced).
• في لغة جافا يتم تخزين المتغيرات الأولوية في منطقة في الذاكرة تسمى Stack وتخزن فيها القيم الفعلية للمتغيرات و القيم الافتراضية للأرقام 0، وللمنطقية false،وللأحرف u0000\ وهي اسرع في الوصول الى القيم وحجمها ثابت.
مثل: int, double, char, boolean.
• تخزين الكائنات والمتغيرات المرجعية في منطقة تسمى Heap وتخزن فيها عنوان الذاكرة وتخزن فيها القيم الافتراضية للكائنات، الString، المصفوفات، Interfaces. وهي بطيئة في الوصل الى البيانات وذلك لانها تخزن عناوين المتغيرات وليس القيم الفعلية مثل stack وايضا حجمها متغير ويعتمد على الكائن.
واذا اردنا انشاء متغير من هذا النوع نستخدم الكلمة المفتاحية new.
ClassName objectname = new ClassName();
مثل
Array arr = new Array();
❤1
𝐈𝐓𝐂𝐎𝐃𝐄
#معلومة سلام الله عليكم واسعد الله مسائكم بكل خير. موضوعنا اليوم خفيف ومهم لمعرفة كيف تخزين لغة جافا وبعض اللغات المشابهه المتغيرات في الذاكرة : هناك نوعين من المتغيرات في البرمجة وهي المتغيرات الاولية(primitive) و المتغيرات المرجعية(Referenced). • في لغة…
علق احد الاخوة بسؤال رائع على المنشور السابق يقول :
بالنسبة لل Stack فأنه يتم انشائه تلقائياً عند استدعاء المتغير ويتم حذفه عند انتهاء عمل هذا المتغير تلقائياً.
اما بالنسبة لل Heap فأنه يتم انشائه بواسطة الكلمة المفتاحية (new) وتستمر دورة حياته بواسطة البرنامج(اي كلما ظل البرنامج شغال تستمر حياة المتغير ) ويتم ازالته بواسطة جامع القمامة "Garbage Collector" وهو جزء من JVM الذي يدير الذاكرة تلقائيًا عن طريق تحرير الذاكرة المُخصصة للكائنات التي لم يعد هناك حاجة إليها.
1. التعرف على الكائنات غير المستخدمة: يحدد GC الكائنات التي لم يعد هناك أي إشارات (references) إليها في البرنامج.
2. تحرير الذاكرة: يقوم بحذف هذه الكائنات وتحرير الذاكرة التي كانت تشغلها.
3. ضغط الذاكرة: (في بعض الأنواع) يعيد تنظيم الذاكرة لتقليل التجزئة.
- يمنع تسرب الذاكرة (Memory Leaks).
- يقلل من أخطاء البرمجة المتعلقة بإدارة الذاكرة.
- يجعل البرمجة أسهل حيث لا يحتاج المطور. لتحرير الذاكرة يدويًا
عرفنا كيف يتم تخزين المتغيرات بالذاكرة وان كل متغير يحجز مساحة عند تعريفه هذا يعني انه لو في برنامج كبير وفيه الكثير من المتغيرات المعرفه سوف يحجز مساحة كبيرة من الذاكرة في كل مرة نشغل البرنامجكما ذكرنا في المنشور السابق انه يوجد منطقتين في الذاكرة لتخزين المتغيرات وعرفنا الفرق بينهم واليوم سوف نوضح كيف يتم تحرير مساحة الذاكرة التي تستخدمها المتغيرات لتخزين القيم.
بالنسبة لل Stack فأنه يتم انشائه تلقائياً عند استدعاء المتغير ويتم حذفه عند انتهاء عمل هذا المتغير تلقائياً.
اما بالنسبة لل Heap فأنه يتم انشائه بواسطة الكلمة المفتاحية (new) وتستمر دورة حياته بواسطة البرنامج(اي كلما ظل البرنامج شغال تستمر حياة المتغير ) ويتم ازالته بواسطة جامع القمامة "Garbage Collector" وهو جزء من JVM الذي يدير الذاكرة تلقائيًا عن طريق تحرير الذاكرة المُخصصة للكائنات التي لم يعد هناك حاجة إليها.
كيف يعمل ال "Garbage Collector"
1. التعرف على الكائنات غير المستخدمة: يحدد GC الكائنات التي لم يعد هناك أي إشارات (references) إليها في البرنامج.
2. تحرير الذاكرة: يقوم بحذف هذه الكائنات وتحرير الذاكرة التي كانت تشغلها.
3. ضغط الذاكرة: (في بعض الأنواع) يعيد تنظيم الذاكرة لتقليل التجزئة.
مميزات ال "Garbage Collector"
- يمنع تسرب الذاكرة (Memory Leaks).
- يقلل من أخطاء البرمجة المتعلقة بإدارة الذاكرة.
- يجعل البرمجة أسهل حيث لا يحتاج المطور. لتحرير الذاكرة يدويًا
❤1
Forwarded from harmash.com
تعلم الكتابة على لوحة المفاتيح كالمحترفين باللغتين العربية والإنجليزية بشكل مباشر من المتصفح:
https://harmash.com/learn-typing
🔸في البداية تتمرن على حفظ أماكن الأحرف.
🔸بعدها تبدأ بكتابة كلمات.
🔸بعدها تبدأ بالتمرن على كتابة نصوص طويلة.
🔸لا تحتاج تسجيل دخول أو تحميل أي برنامج على حاسوبك.
https://harmash.com/learn-typing
🔸في البداية تتمرن على حفظ أماكن الأحرف.
🔸بعدها تبدأ بكتابة كلمات.
🔸بعدها تبدأ بالتمرن على كتابة نصوص طويلة.
🔸لا تحتاج تسجيل دخول أو تحميل أي برنامج على حاسوبك.
قال الامام الشافعي :
ربنا يوفقنا جميعا 🤍🤲
آفة المتعلم الملل ،وقلة صبره على الدرس والنظر.
الملول لا يكون حافظاً ،وإنما يحفظ من دام درسه ، وكد فكره ، وسهر ليله ، لا من رَّفه نفسه .
ربنا يوفقنا جميعا 🤍🤲
بسم الله الرحمن الرحيم.
#شرح
سنتطرق اليوم لموضوع مهم قبل الدخول في الوراثة وهو عن constructor:
ماهو الكونستركتور(constructor): هي دالة لها نفس اسم الكلاس ويستخدم لتهيئة الكائن، يتم استدعاؤه تلقائيا عند إنشاء Object.
لنبدأ بمثال بسيط لتوضيح الـ Constructor في جافا. لنفترض وجود كلاس يسمى “Person” يحتوي على خاصيتين: “name” و “age”. سنقوم بتعريف الـ Constructor للكلاس “Person” لتعيين القيم الأولية لهذه الخصائص.
1-البناء الافتراضي(Default Constructor) :
هو كونستركتور ينشئه المترجم(compiler) تلقائيا اذا لم تعرف أي بناء في الكلاس.
2-البناء بدون معاملات(No-Argument Constructor):
وهو كونستركتور لا يقبل اي قيمة(arguments).
3-البناء المُعامِل(Parameterized Constructor):
هو كونستركتور يقبل يقم عند إنشاء كائن.
4-البناء المتسلسل (Constructor Chaining):
استدعاء كونستركتور من داخل كونستركتور آخر في نفس الكلاس (this()) أو من الفئة الأم (super())،ويستخدم لإعادة استخدام الكود وتجنب التكرار.
#شرح
سنتطرق اليوم لموضوع مهم قبل الدخول في الوراثة وهو عن constructor:
ماهو الكونستركتور(constructor): هي دالة لها نفس اسم الكلاس ويستخدم لتهيئة الكائن، يتم استدعاؤه تلقائيا عند إنشاء Object.
كيفية إنشاء الـ Constructor في جافا
لنبدأ بمثال بسيط لتوضيح الـ Constructor في جافا. لنفترض وجود كلاس يسمى “Person” يحتوي على خاصيتين: “name” و “age”. سنقوم بتعريف الـ Constructor للكلاس “Person” لتعيين القيم الأولية لهذه الخصائص.
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}ماهي انواع الكونستركتور:
1-البناء الافتراضي(Default Constructor) :
هو كونستركتور ينشئه المترجم(compiler) تلقائيا اذا لم تعرف أي بناء في الكلاس.
public class Car{
}2-البناء بدون معاملات(No-Argument Constructor):
وهو كونستركتور لا يقبل اي قيمة(arguments).
class Person {
Person(){
}
}3-البناء المُعامِل(Parameterized Constructor):
هو كونستركتور يقبل يقم عند إنشاء كائن.
public class Car {
private String model;
private int year;
// Parameterized Constructor
public Car(String model, int year) {
this.model = model;
this.year = year;
}
}4-البناء المتسلسل (Constructor Chaining):
استدعاء كونستركتور من داخل كونستركتور آخر في نفس الكلاس (this()) أو من الفئة الأم (super())،ويستخدم لإعادة استخدام الكود وتجنب التكرار.
public class Vehicle {
private String type;
public Vehicle(String type) {
this.type = type;
}
}
public class Car extends Vehicle {
private String model;
// Constructor Chaining
public Car(String type, String model) {
super(type); // استدعاء بناء الفئة الأم
this.model = model;
}
}ملاحطة:
1-الكونستركتور لا تعيد اي قيمة ولا يمكن ان تكون static, abstract, final وsynchronized
2-ليس موروثًا:
الكلاس الابن لا ترث بناءات الكلاس الأم، لكنها تُجبَر على استدعاء أحدها (باستخدام super()):
🔥3
بسم الله الرحمن الرحيم والصلات السلام على اشرف المرسلين:
#شرح مستمرين في توضيح واعطاء افكار بسيطة عن مفاهيم OOP واليوم سنتحدث عن مفهوم مهم من هذا المفاهيم وهو التوريث او الواثة (Inheritance).
هو احد الركائز الاساسية التي توفرها oop، والتي تسمح لفئة (class) بالحصول على خصائص(attributes) و دوال(methods) فئة أخرى, وجميع الكلاسات في لغة جافا ترث بشكل تلقائي من الكلاس Object، وهو اعلى subclass في جافا.
وتستخدم لإنشاء علاقات هرمية بين الفئات، مما يسهل إعادة استخدام الكود وتنظيفه.
• الفئة الأم/الأصل (superclass/parent): هي الفئة التي يتم وراثة خصائصها ووظائفها.
• الفئة الابن/الفرعية(subclass/child class): هي التي ترث جميع الخصائص والوظائف من الفئة الأم( ما عدا private).
• الكلمة المفتاحية (extends): تستخدم لإنشاء علاقة توريث بين الفئات.
مكان وضع الكلمة extends:
نضع الكلمة extends بعد إسم الكلاس, ثم نضع بعدها إسم الكلاس الذي نريد الوراثة منه.
الكود التالي يوضح ان الكلاس employee يرث من الكلاس person.
• الكلمة المفتاحية (instanceof): تستخدم لمعرفة اذا كان الكائن ينتمي الى كلاس معين او لا، ويرجع true اذا كان الكائن ينتمي لكلاس معين، غير ذلك يرجع false.
ملاحظة:
#شرح مستمرين في توضيح واعطاء افكار بسيطة عن مفاهيم OOP واليوم سنتحدث عن مفهوم مهم من هذا المفاهيم وهو التوريث او الواثة (Inheritance).
التوريث (Inheritance) :
هو احد الركائز الاساسية التي توفرها oop، والتي تسمح لفئة (class) بالحصول على خصائص(attributes) و دوال(methods) فئة أخرى, وجميع الكلاسات في لغة جافا ترث بشكل تلقائي من الكلاس Object، وهو اعلى subclass في جافا.
وتستخدم لإنشاء علاقات هرمية بين الفئات، مما يسهل إعادة استخدام الكود وتنظيفه.
مثلا نقوم بعمل نظام جامعي فسيكون عندنا صنف(class) للطلاب وصنف اخر للموظفين، وسنلاحظ ان الصنفين يشتركون في مجموعة من الصفات(properties) مثل الاسم والعمر ورقم الهاتف والعنوان....، فبدلا من ان نكرر تعريف تلك الصفات في كلا الصنفين، نقوم بعمل صنف جديد وليكن "شخص" ونضع فيه الصفات المشتركة ونقوم بتوريث تلك الصفات الى كل من صنف الطلاب وصنف الموظفين.
المصطلاحات والمفاهيم المهم في الوراثة (Inheritance):
• الفئة الأم/الأصل (superclass/parent): هي الفئة التي يتم وراثة خصائصها ووظائفها.
• الفئة الابن/الفرعية(subclass/child class): هي التي ترث جميع الخصائص والوظائف من الفئة الأم( ما عدا private).
• الكلمة المفتاحية (extends): تستخدم لإنشاء علاقة توريث بين الفئات.
مكان وضع الكلمة extends:
نضع الكلمة extends بعد إسم الكلاس, ثم نضع بعدها إسم الكلاس الذي نريد الوراثة منه.
الكود التالي يوضح ان الكلاس employee يرث من الكلاس person.
class person {
}
class employee extends person {
}• الكلمة المفتاحية (instanceof): تستخدم لمعرفة اذا كان الكائن ينتمي الى كلاس معين او لا، ويرجع true اذا كان الكائن ينتمي لكلاس معين، غير ذلك يرجع false.
class Person
}
class Employees extends Person{
}
class Students extends Person{
}
public class Main {
public static void main (String [] arges){
Students st = new Students();
System. out. println(st instanceof Person );
System. out. println(st instanceof Students );
System. out. println(st instanceof Employees );
}
}
مخرج الكود السابق:
true
true
false
ملاحظة:
جافا لا تدعم تعدد الوراثة كما يوجد في بعض لغات البرمجة الأخرى, أي لا يمكن للكلاس الواحد الوراثة في نفس الوقت من أكثر من كلاس.
إذاً الكلاس الوحد لا يمكنه أن يفعل extends لأكثر من كلاس , بمعنى أن كل كلاس يمكنه وراثة كلاس واحد.
🔥1
رسمياً تم إطلاق نموذج Chatgpt 5 وهذا ليس مجرد إصدار جديد بل بداية فصل جديد في عالم الذكاء الاصطناعي
أطلقت شركة OpenAI تحديث نموذج GPT-5 الذي يمثل نقلة نوعية من حيث الذكاء والدقة والقدرة على الفهم والتفاعل بشكل أقرب إلى الإنسان من أي إصدار سابق.
أبرز التحسينات التي تميّز GPT-5:
- انخفاض كبير في معدل الأخطاء (Hallucinations) حيث تم تقليل نسبة المعلومات الخاطئة من 4.5٪ إلى 0.7٪ فقط مما يجعل فرصة تلقي إجابة غير دقيقة شبه معدومة.
- يمكن للنموذج الآن التعامل مع ما يصل إلى 272,000 رمز إدخال وتوليد حتى 128,000 رمز إخراج مما يعني أنه قادر على قراءة وتحليل ملفات طويلة (مثل تقارير من 300 صفحة) بدقة أكاديمية عالية.
- كفاءة شبه بشرية في اختبارات متخصصة حيث حصل على 94.6% في اختبار AIME (الرياضيات) و74.9% في اختبار SWE-bench (حلول لمشاكل برمجية واقعية) مما يجعله شريكًا فعّالًا سواء في البرمجة أو تحليل البيانات.
- نموذج موحّد متعدد المهام، في السابق كانت هناك أدوات منفصلة للكتابة (ChatGPT) البرمجة (Codex) والصور (DALL·E) أما الآن فإن GPT-5 يجمع كل هذه القدرات ضمن نظام واحد، ويعالج النصوص، الصور، والصوت ضمن نموذج شامل.
فهم واستيعاب الصوت البشري، أي أنه أصبح بإمكان GPT-5 فهم نبرة الصوت وطريقة الحديث، حتى وإن لم تكن العبارات مرتبة، ويُجري محادثات طبيعية كما لو كان أحد أعضاء الفريق كما يُنتظر قريبًا أن يتمكن من تحليل محتوى اجتماعات الفيديو وتقديم ملخصات دقيقة لها.
- تم تضمين ميزة "الاكتمالات الآمنة" والتي تضمن ردودًا متزنة ومحايدة عند التعامل مع قضايا حساسة، بعيدًا عن التهرب أو الصيغ الآلية المعتادة.
- قدرات ذاتية متقدمة (Agentic Capabilities): من أبرز ما يميز GPT-5 هو قدرته على أداء المهام تلقائيًا دون طلب مباشر مثل:
الرد على رسائل البريد الإلكتروني
تنظيم الجداول الزمنية
متابعة المهام
تلخيص الاجتماعات
البحث وتقديم المقترحات
مرحباً بكم في ثورة غير مسبوقة في عالم الذكاء الاصطناعي🤖.
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين.
اليوم موضوعنا عن العلاقات مابين الكلاسات والكائنات
Relationship between objects and classes
العلاقات تنقسم إلى الآتي :👇
اليوم موضوعنا عن العلاقات مابين الكلاسات والكائنات
Relationship between objects and classes
العلاقات تنقسم إلى الآتي :👇
1️⃣ الوراثة(inheritance)
تُسمى الوراثة أيضًا التعميم، وتُستخدم لوصف العلاقة بين الفئتين الأم والفرعية. تُسمى الفئة الأم أيضًا فئة أساسية، وتُسمى الفئة الفرعية أيضًا فئة مشتقة.
في علاقة الوراثة، ترث الفئة الفرعية جميع دوال الفئة الأم، وتحتوي الفئة الأم على جميع السمات والأساليب والفئات الفرعية. تحتوي الفئات الفرعية على معلومات إضافية بالإضافة إلى نفس معلومات الفئة الأم.
على سبيل المثال: الحافلات وسيارات الأجرة والسيارات هي سيارات، جميعها لها أسماء، ويمكن أن تكون جميعها على الطريق.
تُسمى الوراثة أيضًا التعميم، وتُستخدم لوصف العلاقة بين الفئتين الأم والفرعية. تُسمى الفئة الأم أيضًا فئة أساسية، وتُسمى الفئة الفرعية أيضًا فئة مشتقة.
في علاقة الوراثة، ترث الفئة الفرعية جميع دوال الفئة الأم، وتحتوي الفئة الأم على جميع السمات والأساليب والفئات الفرعية. تحتوي الفئات الفرعية على معلومات إضافية بالإضافة إلى نفس معلومات الفئة الأم.
على سبيل المثال: الحافلات وسيارات الأجرة والسيارات هي سيارات، جميعها لها أسماء، ويمكن أن تكون جميعها على الطريق.
❤2
2️⃣ التركيب (composition)
العلاقة بين الكل والجزء ، ولكن لا يمكن فصل الكل والجزء.
تمثل العلاقة المركب العلاقة بين الكل وجزء من الفصل ، والجزء بشكل عام والجزء لها حياة متسقة. بمجرد عدم وجود الكائن العام ، لن تكون بعض الأشياء موجودة ، وسوف تموت جميعًا في نفس الحياة. على سبيل المثال ، يتكون الشخص من رأس وجسم.
ملخص الكلام ان العلاقة تكون مابين الاوبجيكت والثاني قوية بحيث اذا انتهى الاول ينتهى الثاني معه لذلك يسموها علاقة جزء من كل
العلاقة بين الكل والجزء ، ولكن لا يمكن فصل الكل والجزء.
تمثل العلاقة المركب العلاقة بين الكل وجزء من الفصل ، والجزء بشكل عام والجزء لها حياة متسقة. بمجرد عدم وجود الكائن العام ، لن تكون بعض الأشياء موجودة ، وسوف تموت جميعًا في نفس الحياة. على سبيل المثال ، يتكون الشخص من رأس وجسم.
ملخص الكلام ان العلاقة تكون مابين الاوبجيكت والثاني قوية بحيث اذا انتهى الاول ينتهى الثاني معه لذلك يسموها علاقة جزء من كل
❤2
3⃣ التجميع(Aggregation)
العلاقة بين الكل والجزء ، والجزء والجزء يمكن فصلها.
تمثل العلاقات الإجمالية أيضًا العلاقة بين الكل والجزء من الفصل ، وكائنات الأعضاء هي جزء من الكائن العام ، ولكن يمكن أن يكون الكائن العضو موجودًا بشكل مستقل عن الكائن العام.
على سبيل المثال ، يعد سائقي الحافلات وملابس العمل والقبعات جزءًا من العلاقة الشاملة ، ولكن يمكن فصلها. يمكن ارتداء ملابس العمل والقبعات على السائقين الآخرين. يمكن لسائقي الحافلات أيضًا ارتداء ملابس وقبعات عمل أخرى.
بمعنى أن كل اوبجيكت مستقل عن الاخر فقط يتم الاستفاده من اوبجيكت معين في لفتره محدوده وذا انتهى الاوبجيكت الاول يبقى الثاني كما هو ولا يتأثر اي ان هذه العلاقة عكس ال composition تماما
العلاقة بين الكل والجزء ، والجزء والجزء يمكن فصلها.
تمثل العلاقات الإجمالية أيضًا العلاقة بين الكل والجزء من الفصل ، وكائنات الأعضاء هي جزء من الكائن العام ، ولكن يمكن أن يكون الكائن العضو موجودًا بشكل مستقل عن الكائن العام.
على سبيل المثال ، يعد سائقي الحافلات وملابس العمل والقبعات جزءًا من العلاقة الشاملة ، ولكن يمكن فصلها. يمكن ارتداء ملابس العمل والقبعات على السائقين الآخرين. يمكن لسائقي الحافلات أيضًا ارتداء ملابس وقبعات عمل أخرى.
بمعنى أن كل اوبجيكت مستقل عن الاخر فقط يتم الاستفاده من اوبجيكت معين في لفتره محدوده وذا انتهى الاوبجيكت الاول يبقى الثاني كما هو ولا يتأثر اي ان هذه العلاقة عكس ال composition تماما
❤2
4⃣ ال**(Association)
يشير إلى أن خاصية فئة ما تحمل إشارة إلى مثيل (أو مثيلات) لفئة أخرى.
الارتباط هو العلاقة الأكثر استخدامًا بين الفصل والفئة ، مما يعني وجود اتصال بين نوع واحد من الكائن ونوع آخر من الكائن. تنتمي المجموعات والتجمعات أيضًا إلى العلاقات الترابطية ، لكن العلاقات بين فئات الانتماءات أضعف من الاثنين الآخرين.
هناك أربعة أنواع من الجمعيات: الجمعيات ثنائية الاتجاه ، والجمعيات أحادية الاتجاه ، والرابطات الذاتية ، والجمعيات متعددة الأرقام.
على سبيل المثال: السيارات والسائقين ، تتوافق سيارة واحدة مع سائق معين ، ويمكن للسائق قيادة سيارات متعددة.
يشير إلى أن خاصية فئة ما تحمل إشارة إلى مثيل (أو مثيلات) لفئة أخرى.
الارتباط هو العلاقة الأكثر استخدامًا بين الفصل والفئة ، مما يعني وجود اتصال بين نوع واحد من الكائن ونوع آخر من الكائن. تنتمي المجموعات والتجمعات أيضًا إلى العلاقات الترابطية ، لكن العلاقات بين فئات الانتماءات أضعف من الاثنين الآخرين.
هناك أربعة أنواع من الجمعيات: الجمعيات ثنائية الاتجاه ، والجمعيات أحادية الاتجاه ، والرابطات الذاتية ، والجمعيات متعددة الأرقام.
على سبيل المثال: السيارات والسائقين ، تتوافق سيارة واحدة مع سائق معين ، ويمكن للسائق قيادة سيارات متعددة.
🔥2❤1
5️⃣ الاعتمادية (Depends) : هذه العلاقة هي علاقة مصلحة بحته "لا تجربها في المنزل" ، فهذه العلاقة تجعل الكائن يستعمل الكائن الاخر وقت الحاجة اليه ثم يقتله ، تخيل ذلك ، ما شعورك .
اكبر مثال هو استخدامك لل Scanner يا قاتل الكائنات .
- في المخططات تمثل علاقة المصلحة بسهم متقطع ينطلق من الكائن المصلحي .
اكبر مثال هو استخدامك لل Scanner يا قاتل الكائنات .
- في المخططات تمثل علاقة المصلحة بسهم متقطع ينطلق من الكائن المصلحي .
✍️عاصم ناجي
🔥2
6️⃣ التنفيذ (implementation) : تسمى علاقة التنفيذ ب Realization كمثال :
Man implements CanDo
هنا الفئة Man تتعهد وتُقسم بانها ستقوم بكل الوظائف الموجودة في CanDo . ونستفيد بذلك ان نكون متاكدين بان فئة معينة تستطيع فعل وظيفة ما .
مثلاً نبني واجهة interface باسم CanMakeSound فيها الدالة makeSound ، ثم نبني ثلاث فئات تنفذ الواجهة وهي Dog, Cat, Cow ولكن كل فئة سيكون اصدار الصوت لها مختلفاً , ونستفيد من ذلك كالاتي :
void sayHello(CanMakeSound obj){
obj.makeSound();
}
هنا نستطيع ان نمرر Dog او Cat او Cow لانهم تعهدو بانهم سيقومون بالوظائف التي في CanMakeSound .
- في المخططات نمثل العلاقة بخط متقطع من الفئة الى الواجهة على رأسه سهم .
Man implements CanDo
هنا الفئة Man تتعهد وتُقسم بانها ستقوم بكل الوظائف الموجودة في CanDo . ونستفيد بذلك ان نكون متاكدين بان فئة معينة تستطيع فعل وظيفة ما .
مثلاً نبني واجهة interface باسم CanMakeSound فيها الدالة makeSound ، ثم نبني ثلاث فئات تنفذ الواجهة وهي Dog, Cat, Cow ولكن كل فئة سيكون اصدار الصوت لها مختلفاً , ونستفيد من ذلك كالاتي :
void sayHello(CanMakeSound obj){
obj.makeSound();
}
هنا نستطيع ان نمرر Dog او Cat او Cow لانهم تعهدو بانهم سيقومون بالوظائف التي في CanMakeSound .
- في المخططات نمثل العلاقة بخط متقطع من الفئة الى الواجهة على رأسه سهم .
✍️@AsemNaji
🔥2
توضيح مهم لمفهوم
inheritance و access modifier و object
inheritance و access modifier و object
Forwarded from عاصم آل ناجي (┍᥈᥉ᥱᦂ┑)
بسم الله الرحمن الرحيم ، والصلاة والسلام على اشرف المرسلين .
فائدة جعل الدالة تعيد this .
في لغة جافا وهي كائنية التوجه بالكامل نقسم المشروع الى فئات متعددة وفي كل فئة نضع مجموعة من الدوال ثم نستعملها هكذا مثلاً .
ثم سنستعمله هكذا .
لا مشكلة في هذا وسيتم طباعة الاستعلام بشكل رائع ، لكن ما رأيك بجعل استخدام الفئة كالتالي .
الفكرة كالتالي
هل تحب الاختصار اكثر ، ما رأيك ان نجعل استعمالها هكذا .
كل ما في الامر اننا سنجعل الدالة select دالة مشتركة static .
ثم نغير محتواها كالتالي .
ويفضل ايضاً ان تحول منشئ الفئة constructor الى منشئ خاص
فكرة ارجاع this شائعة جداً وغالباً ما ستستعملها وستسهل عليك الكثير من العمل ، لاحظ استعمال النص التالي .
كما يجب ان تعود نفسك على هذا النوع من الاستخدام ان كنت مبتدئاً .
فائدة جعل الدالة تعيد this .
في لغة جافا وهي كائنية التوجه بالكامل نقسم المشروع الى فئات متعددة وفي كل فئة نضع مجموعة من الدوال ثم نستعملها هكذا مثلاً .
class Query{
String table;
String columns;
void setTable(String table){
this.table = table;
}
void setColumns(String columns){
this.columns = columns;
}
@Override
public String toString(){
return "SELECT " + columns + " FROM " + table;
}ثم سنستعمله هكذا .
Query q = new Query();
q.setTable("users");
q.setColumns("*");
System.out.print(q);
لا مشكلة في هذا وسيتم طباعة الاستعلام بشكل رائع ، لكن ما رأيك بجعل استخدام الفئة كالتالي .
Query q = new Query();
q.select("*").from("users");
الفكرة كالتالي
class Query{
String table;
String columns;
Query from(String table){
this.table = table;
return this;
}
Query select(String columns){
this.colmns = columns;
return this;
}
@Override
public String toString(){
return "SELECT " + columns + " FROM " + table;
}هل تحب الاختصار اكثر ، ما رأيك ان نجعل استعمالها هكذا .
Query.select("*").from("users");كل ما في الامر اننا سنجعل الدالة select دالة مشتركة static .
ثم نغير محتواها كالتالي .
static Query select(String columns){
Query q = new Query();
q.columns = columns;
return q;
}ويفضل ايضاً ان تحول منشئ الفئة constructor الى منشئ خاص
private Query(){}فكرة ارجاع this شائعة جداً وغالباً ما ستستعملها وستسهل عليك الكثير من العمل ، لاحظ استعمال النص التالي .
String name = "asem";
if(name.substring(0, 1).toUpperCase().equals("A")){
System.out.print(name + " starts with A or a");
}
كما يجب ان تعود نفسك على هذا النوع من الاستخدام ان كنت مبتدئاً .
🔥2