𝐈𝐓𝐂𝐎𝐃𝐄
84 subscribers
57 photos
14 videos
8 files
38 links
ثقافة برمجية ، معلومات تقنية ، روابط للاحتراف في البرمجة.
حسابي تلجرام: @Q_s_i0.
Download Telegram
لو انت مبرمج وعايز تحسّن مستواك في حل المشكلات، جرّب المواقع دي:

‏🔹 codewars.com – تمارين متنوعة
‏🔹 leetcode.com – تحضير إنترفيو
‏🔹 hackerrank.com – مناسب للمبتدئين
‏🔹 topcoder.com – تحديات محترفين
‏🔹 coderbyte.com – مستويات مختلفة
‏🔹 codeforces.com – مسابقات حيّة

ابدأ بـ HackerRank و Codewars، وبعدها خش عالم LeetCode وCodeforces
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين :

#شرح بالمنشور السابق تعرفنا على منهج OOP وشرحنا بعض المناهج الاخر اما اليوم سوف نتعمق في مفهوم OOP .

- البرمجة الكائنية (Object-Oriented Programming - OOP) هي نموذج برمجي يُنظِّم الكود في وحدات تسمى "الكائنات" (Objects)، كل كائن يجمع بين البيانات والوظائف التي تعمل معًا لأداء مهام معينة.

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

- للبرمجة كائنية التوجه أربعة مبادئ رئيسية. سنتناول كلًا منها بالتفصيل، ولكن قبل ذلك، دعونا نفهم مفهومًا مهمًا في جافا، وهو مُعَدِّلات الوصول.؟

-مُعدِّلات الوصول في جافا (Access Modifiers):
في جافا، تتحكم معدلات الوصول (Access Modifiers) في مدى رؤية الفئات (classes) والأصناف الفرعية (subclasses) والمتغيرات (variables) والتوابع (methods) من أجزاء أخرى من التعليمات البرمجية. فهم هذه المعدلات أمر بالغ الأهمية لتصميم برمجيات قوية ومنظمة.

تحتوي Java بشكل أساسي على أربعة أنواع من معدِّلات الوصول:

1- عام (public):
-الوصول: من أي مكان (أي كلاس، أي حزمة package).
-الاستخدام : عناصر يمكن الوصول إليها عالميًا يقتصر على الفئة أو الحزمة أو تسلسل الوراثة.
-مثال:

    public class Car {
public String model; // يمكن الوصول من أي كلاس
}


2- خاص (private):
وهو مستوى الوصول الأكثر تقييدًا، ويُستخدم بشكل أساسي لتغليف البيانات عن طريق إخفاء البيانات الحساسة ومنع التلاعب المباشر بأعضاء الفئة من فئات أخرى.
-الوصول : داخل نفس الكلاس فقط.
- الاستخدام:
-إخفاء تفاصيل التنفيذ (encapsulation)
- التغليف Getter/Setter
-مثال:

    public class BankAccount {
private double balance; // لا يمكن الوصول له إلا داخل هذا الكلاس

public double getBalance() { // طريقة عمومية للوصول الآمن
return balance;
}
}

3- محمي (protected):
- الوصول:
- داخل نفس الحزمة (package) ومن الفئات الفرعية( حتى لو كانت في حزم مختلفة) .
- من خلال الوراثة(subclasses) حتى لو كانت في حزمة مختلفة.
- الاستخدام:
- حماية البيانات مع السماح للكلاسات الفرعية بالوصول إليها.
- في التوريث.
- مثال:

    public class Vehicle {
protected int speed; // متاح للكلاسات في نفس الحزمة والفرعية
}


4- افتراضي - بدون معدل (default):
- الوصول : داخل نفس الحزمة فقط (package-private)
- ملاحظة: لا تكتب أي كلمة مفتاحية (مثل int x;).
- الاستخدام:
- عناصر متاحة فقط داخل حزمتها.
- مثال:

    class Calculator { // كلاس افتراضي (لا يوجد public)
int sum(int a, int b) { // دالة افتراضية
return a + b;
}
}

#اللهم_كن_مع_إخواننا_في_غزة🇵🇸
❤2
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين :
#مصطلح موضوعنا اليوم عن تغليف (Encapsulation) في لغة جافا :
يُعد التغليف (Encapsulation) أحد المبادئ الأساسية الأربعة للبرمجة الكائنية التوجه (Object-Oriented Programming - OOP)، إلى جانب الوراثة (Inheritance)، وتعدد الأشكال (Polymorphism)، والتجريد (Abstraction). يهدف التغليف إلى تجميع المتغيرات والدوال التي تعمل على هذه البيانات في وحدة واحدة، وهي الكائن (Object) أو الفئة (Class). يُعرف هذا المبدأ أيضًا بـ "إخفاء المعلومات" (Information Hiding)، حيث يتم إخفاء التفاصيل الداخلية لتنفيذ الفئة عن العالم الخارجي، مما يسمح بالوصول إلى البيانات أو تعديلها فقط من خلال طرق محددة توفرها الفئة نفسها.

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

1-إخفاء البيانات (Data Hiding)
جعل المتغيرات (أو الحقول) الخاصة بالفئة خاصة (private)، مما يعني أنه لا يمكن الوصول إليها مباشرة من خارج الفئة. هذا يمنع التعديل غير المصرح به للبيانات ويضمن سلامتها.
2-توفير واجهة عامة (Public Interface): توفير طرق عامة (public methods)، تُعرف غالبًا بـ "طرق الوصول" (Getter methods) و "طرق التعديل" (Setter methods)، للوصول إلى البيانات الخاصة وتعديلها بطريقة متحكم بها. هذه الطرق تعمل كواجهة بين البيانات الداخلية للفئة والعالم الخارجي.

توفر التغليف العديد من الفوائد الهامة في تطوير البرمجيات :


• الأمان (Security): يحمي البيانات من الوصول أو التعديل غير المصرح به من خارج الفئة. على سبيل المثال، إذا كان لديك متغير يمثل عمر شخص، يمكنك استخدام طريقة تعديل (setter) للتحقق من أن العمر المدخل منطقي (ليس سالبًا أو كبيرًا جدًا) قبل تعيينه.
• التحكم (Control): يمنحك تحكمًا كاملاً في كيفية الوصول إلى بيانات الفئة وتعديلها. يمكنك تطبيق منطق عمل معين أو قيود على البيانات عند قراءتها أو كتابتها.
• المرونة (Flexibility): يسمح لك بتغيير التنفيذ الداخلي للفئة دون التأثير على الكود الذي يستخدم هذه الفئة. طالما أن الواجهة العامة (طرق الـ Getter والـ Setter) تظل كما هي، فإن أي تغييرات داخلية لن تتطلب تعديل الكود الخارجي.
• سهولة الصيانة (Maintainability): يجعل الكود أسهل في الصيانة والتصحيح. إذا حدث خطأ في البيانات، يمكنك تتبع المشكلة بسهولة أكبر داخل الفئة التي تحتوي على تلك البيانات وطرق الوصول إليها.
• إعادة الاستخدام (Reusability): الفئات المغلفة جيدًا تكون وحدات مستقلة بذاتها، مما يسهل إعادة استخدامها في مشاريع مختلفة.

كيفية تحقيق التغليف في جافا:

يتم تحقيق التغليف بشكل أساسي باستخدام معدلات الوصول (Access Modifiers) وخصوصًا للطرق:
1- إعلان المتغيرات كـ private : هذا يحد من الوصول المباشر للمتغيرات من خارج الفئة.

2- توفير طرق public للوصول والتعديل:
• طرق الـ Getter (Accessors): تستخدم لاسترداد قيمة المتغير. عادة ما تبدأ بـ get ).() متبوعة باسم المتغير (مثل() getName)
• طرق الـ Setter (Mutators): تستخدم لتعيين أو تعديل قيمة المتغير. عادة ما تبدأ بـ set متبوعة باسم المتغير (مثل (String name)setName)يمكن لهذه الطرق أن تتضمن منطق تحقق من صحة البيانات.

مثال برمجي شامل:



public class Employee {
// 1. المتغير الخاصة (Encapsulated data)
private String name;

// 2. المنشئ (Constructor)
public Employee(String name) {
this.name = name;
}

// 3. الدوال الناقلة (Getters)
public String getName() {
return name;
}

// 4. الدوال المعدلة (Setters)
public void setName(String name) {
if (name != null && !name.isEmpty())
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Employee emp = new Employee("قصي", 5000, 101);

// الوصول للبيانات عبر الـ Getters
System.out.println("الاسم: " + emp.getName());

// تعديل صالح عبر ال Setters
emp.setName("قصي آدم");

System.out.println("بعد التعديل:");
System.out.println("الاسم: " + emp.getName());
}
}
❤3
اختراق عالمي لخدمة Microsoft Sharepoint يسمح للمخترقين بسرقة البيانات من أي سيرفرات مُستضافة ذاتيًا للخدمة، وقد نجح المخترقون في اختراق بعض سيرفرات الحكومة الفيدرالية الأمريكية وجهات حكومية أخرى بسببها.

أيامك يا مايكروسوفت. 😇
https://archive.md/Ym2jZ
#معلومة سلام الله عليكم واسعد الله مسائكم بكل خير.
موضوعنا اليوم خفيف ومهم لمعرفة كيف تخزين لغة جافا وبعض اللغات المشابهه المتغيرات في الذاكرة :
هناك نوعين من المتغيرات في البرمجة وهي المتغيرات الاولية(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 الذي يدير الذاكرة تلقائيًا عن طريق تحرير الذاكرة المُخصصة للكائنات التي لم يعد هناك حاجة إليها.

كيف يعمل ال "Garbage Collector"

1. التعرف على الكائنات غير المستخدمة: يحدد GC الكائنات التي لم يعد هناك أي إشارات (references) إليها في البرنامج.
2. تحرير الذاكرة: يقوم بحذف هذه الكائنات وتحرير الذاكرة التي كانت تشغلها.
3. ضغط الذاكرة: (في بعض الأنواع) يعيد تنظيم الذاكرة لتقليل التجزئة.

مميزات ال "Garbage Collector"

- يمنع تسرب الذاكرة (Memory Leaks).
- يقلل من أخطاء البرمجة المتعلقة بإدارة الذاكرة.
- يجعل البرمجة أسهل حيث لا يحتاج المطور. لتحرير الذاكرة يدويًا
❤1
Forwarded from harmash.com
تعلم الكتابة على لوحة المفاتيح كالمحترفين باللغتين العربية والإنجليزية بشكل مباشر من المتصفح:
https://harmash.com/learn-typing
🔸في البداية تتمرن على حفظ أماكن الأحرف.
🔸بعدها تبدأ بكتابة كلمات.
🔸بعدها تبدأ بالتمرن على كتابة نصوص طويلة.
🔸لا تحتاج تسجيل دخول أو تحميل أي برنامج على حاسوبك.
صورة توضيحية لخطوات تنفيذ الكود التابع لجافا
قال الامام الشافعي :
آفة المتعلم الملل ،وقلة صبره على الدرس والنظر.
الملول لا يكون حافظاً ،وإنما يحفظ من دام درسه ، وكد فكره ، وسهر ليله ، لا من رَّفه نفسه .

ربنا يوفقنا جميعا 🤍🤲
بسم الله الرحمن الرحيم.
#شرح
سنتطرق اليوم لموضوع مهم قبل الدخول في الوراثة وهو عن 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).

التوريث (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

العلاقات تنقسم إلى الآتي :👇
أولا يتم التعبير عن العلاقات بهذه الاسهم في رسم ال class diagram
❤1
1️⃣ الوراثة(inheritance)

تُسمى الوراثة أيضًا التعميم، وتُستخدم لوصف العلاقة بين الفئتين الأم والفرعية. تُسمى الفئة الأم أيضًا فئة أساسية، وتُسمى الفئة الفرعية أيضًا فئة مشتقة.
في علاقة الوراثة، ترث الفئة الفرعية جميع دوال الفئة الأم، وتحتوي الفئة الأم على جميع السمات والأساليب والفئات الفرعية. تحتوي الفئات الفرعية على معلومات إضافية بالإضافة إلى نفس معلومات الفئة الأم.
على سبيل المثال: الحافلات وسيارات الأجرة والسيارات هي سيارات، جميعها لها أسماء، ويمكن أن تكون جميعها على الطريق.
❤2
2️⃣ التركيب (composition)
العلاقة بين الكل والجزء ، ولكن لا يمكن فصل الكل والجزء.
تمثل العلاقة المركب العلاقة بين الكل وجزء من الفصل ، والجزء بشكل عام والجزء لها حياة متسقة. بمجرد عدم وجود الكائن العام ، لن تكون بعض الأشياء موجودة ، وسوف تموت جميعًا في نفس الحياة. على سبيل المثال ، يتكون الشخص من رأس وجسم.‌‌
ملخص الكلام ان العلاقة تكون مابين الاوبجيكت والثاني قوية بحيث اذا انتهى الاول ينتهى الثاني معه لذلك يسموها علاقة جزء من كل
❤2
3⃣ التجميع(Aggregation)
العلاقة بين الكل والجزء ، والجزء والجزء يمكن فصلها.
تمثل العلاقات الإجمالية أيضًا العلاقة بين الكل والجزء من الفصل ، وكائنات الأعضاء هي جزء من الكائن العام ، ولكن يمكن أن يكون الكائن العضو موجودًا بشكل مستقل عن الكائن العام.
على سبيل المثال ، يعد سائقي الحافلات وملابس العمل والقبعات جزءًا من العلاقة الشاملة ، ولكن يمكن فصلها. يمكن ارتداء ملابس العمل والقبعات على السائقين الآخرين. يمكن لسائقي الحافلات أيضًا ارتداء ملابس وقبعات عمل أخرى.‌‌
بمعنى أن كل اوبجيكت مستقل عن الاخر فقط يتم الاستفاده من اوبجيكت معين في لفتره محدوده وذا انتهى الاوبجيكت الاول يبقى الثاني كما هو ولا يتأثر اي ان هذه العلاقة عكس ال composition تماما
❤2
4⃣ ال**(Association)
يشير إلى أن خاصية فئة ما تحمل إشارة إلى مثيل (أو مثيلات) لفئة أخرى.
الارتباط هو العلاقة الأكثر استخدامًا بين الفصل والفئة ، مما يعني وجود اتصال بين نوع واحد من الكائن ونوع آخر من الكائن. تنتمي المجموعات والتجمعات أيضًا إلى العلاقات الترابطية ، لكن العلاقات بين فئات الانتماءات أضعف من الاثنين الآخرين.
هناك أربعة أنواع من الجمعيات: الجمعيات ثنائية الاتجاه ، والجمعيات أحادية الاتجاه ، والرابطات الذاتية ، والجمعيات متعددة الأرقام.
على سبيل المثال: السيارات والسائقين ، تتوافق سيارة واحدة مع سائق معين ، ويمكن للسائق قيادة سيارات متعددة.‌‌
🔥2❤1
📌 توضيح أكثر للموضوع
🔥2❤1
📌 توضيح أكثر للموضوع