يُعد البرمجة الشيئية (OOP) حجر الزاوية لتطبيقات جافا القوية والقابلة للصيانة. غالبًا ما يتسببان مفهومان أساسيان في البرمجة الشيئية، وهما التركيب والتجميع، في حدوث ارتباك. يكاد كلاهما يمثل علاقة “يحتوي على” بين الكائنات، لكنهما يختلفان اختلافًا كبيرًا في آثارهما واستخداماتهما. توضح هذه المقالة هذه الاختلافات من خلال أمثلة عملية.
جدول المحتويات
- التركيب في جافا
- التجميع في جافا
- التركيب مقابل التجميع
- العمل مع التركيب في جافا
- العمل مع التجميع في جافا
التركيب في جافا
يشير التركيب، وهو علاقة “يحتوي على” قوية، إلى علاقة الكل بالجزء حيث يعتمد دورة حياة الجزء كليًا على الكل. إن تدمير الكل يدمر أجزائه أيضًا؛ لا يمكن للأجزاء أن توجد بشكل مستقل. ضع في اعتبارك سيارة: فهي تتكون من محرك وعجلات وأبواب، إلخ. إن التخلص من السيارة يتخلص من هذه المكونات.
في جافا، يتم تنفيذ التركيب عادةً من خلال إنشاء مثيلات مباشرة لأجزاء الكائنات داخل فئة كائن الكل. يقوم كائن الكل بإنشاء هذه الأجزاء وإدارتها.
التجميع في جافا
يشير التجميع، وهو علاقة “يحتوي على” أضعف، إلى أن الجزء يمكن أن يوجد بشكل مستقل عن الكل. يحتفظ كائن الكل بالمراجع للأجزاء، لكن دورات حياتها ليست مرتبطة مباشرة. على سبيل المثال، تحتوي الجامعة على “قسم”، لكن القسم يستمر حتى لو أغلقت الجامعة.
في جافا، ينطوي التجميع على احتفاظ كائن الكل بالمراجع لأجزاء الكائنات. يمكن إدارة هذه المراجع بشكل منفصل. يمكن إنشاء الأجزاء قبل أو بعد كائن الكل والبقاء على قيد الحياة بعد تدميره.
التركيب مقابل التجميع
يلخص الجدول أدناه الاختلافات الرئيسية:
الميزة | التركيب | التجميع |
---|---|---|
العلاقة | علاقة “يحتوي على” قوية (الكل بالجزء) | علاقة “يحتوي على” ضعيفة |
دورة الحياة | تعتمد دورة حياة الجزء على دورة حياة الكل | دورة حياة الجزء مستقلة عن دورة حياة الكل |
الملكية | يملك كائن الكل الأجزاء ويديرها | يحتفظ كائن الكل بالمراجع للأجزاء |
وجود الجزء | لا يمكن للجزء أن يوجد بشكل مستقل | يمكن للجزء أن يوجد بشكل مستقل |
التنفيذ | إنشاء مثيلات مباشرة داخل كائن الكل | مراجع لأجزاء الكائنات المستقلة |
العمل مع التركيب في جافا
دعونا نوضح التركيب بسيارة تتكون من محرك:
class Engine {
public void start() { System.out.println("Engine started"); }
}
class Car {
private Engine engine;
public Car() {
this.engine = new Engine();
}
public void drive() {
engine.start();
System.out.println("Car driving");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car();
myCar.drive();
}
}
يتم إنشاء كائن Engine
داخل فئة Car
. يعتمد وجود Engine
على Car
.
العمل مع التجميع في جافا
الآن، دعونا نوضح التجميع بجامعة وأقسامها:
class Department {
private String name;
public Department(String name) { this.name = name; }
public String getName() { return name; }
}
class University {
private Department[] departments;
public University(Department[] departments) {
this.departments = departments;
}
public void printDepartments() {
for (Department dept : departments) {
System.out.println("Department: " + dept.getName());
}
}
}
public class Main {
public static void main(String[] args) {
Department cs = new Department("Computer Science");
Department math = new Department("Mathematics");
Department[] deps = {cs, math};
University uni = new University(deps);
uni.printDepartments();
}
}
يحتفظ University
بالمراجع لكائنات Department
. توجد كائنات Department
بشكل مستقل ويمكن استخدامها في أماكن أخرى.
يسمح فهم التركيب والتجميع بتصميم تطبيقات جافا أكثر قوة وقابلية للصيانة ومنظمة بشكل جيد. يعتمد الاختيار على متطلبات التصميم وإدارة دورة حياة الكائنات المطلوبة.