الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم تمثيل العلاقات ( composition, aggregation, and association)

مغلق
بدأه Abdullah.Alshammeri في 14 مارس 2007 · 11 رد · 12,838 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم .

واجهت مفهوم غريب علي ,, اثناء دراستي للجافا ,, لم اعرفه يطبق كثيرا في اللغات الاخرى مثل السي بلس ..

نحن ندرس حاليا الربط بين الكلاسات عن طريق عدة علاقات .. منها ,, Composition و aggregation و association

فالمطلوب يأتيني ممثلا عن طريق الUML .. والمطلوب مني تحويله للجافا ,

مثال :

UML.JPG

+ أسئلتي /

1- الذي اعرفه ان العلافة Composition هي علاقة بين whole و part .. فاالكلاس Library اذا تحطم ( ازيل من الذاكرة ) سيزول ايضا الكلاس Book .

وأيضا الAggregation هي علاقة whole , part .. ولكن الفرق انه لو تحطم الكلاس book فان الكلاس Exemplar سيبقى موجود في الذاكرة .

هل فهمي صحيح ,

وكيف يتم تمثيل كل من ال Composition و Aggregation عن طريق الجافا ,, أتمنى ان ارى مثال يوضح الفكرة

2- بالنسبة لل علاقة association .. ماهو المقصود منها .. بحث وبحثت وسألت .. وبالاخير كل ما اعرفه انها علاقة تفاعل

activity .. ولكن لم افهم المقصود منها ..

وأيضا أتمنى ان ارى كيف يتم تمثيل العلاقة association بين الكلاسات

-----------

بالنسبة للUML الذي وضعته في الاعلى .. هو مجرد مثال ..

يعني ما اريده .. هو مثال عام يوضح الفكرة .. ولا يلزم ان يكون نفس الUML اللي وضعته في الاعلى ..

أتمنى المساعدة باي معلومة توضح المقصود

جزاكم الله خير

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

والله مااملك الوقت حتى اشرحها بطريقة OOP لكن كل ماتريده هو فهم OO principles

ابحث عن اي كتاب يشرح OO approach وسوف تجد هذه الأمور بالتفصيل

association classes هي كلاس تنتج عن علاقه مثل تأجير قارب ينتج عن علاقه بين العميل والقارب ، لكن علاقه مع بيانات ، مثل قيمة الأجره

composition هي كيفية جعل احد الكلاس يقوم بمناداة مثد موجوده بكلاس آخر بمعنى أصح تعريف متغير من كلاس B في كلاس A

class A

{

private B b

}

اخي الشمري اقرأ اي كتاب يتحدث عن OO approach وستجد شرح وافي لكيفية فهم UML ورسمه وتحويله إلى كود أي لغه OO

ملاحظه : هذه فائدة تعلم الجافا فأنت تتعلم OO :huh:

#4

السلام عليكم

نعم كما قلت يا أخي الشمرلي بالنسبه لل composition و ال aggregation و كذا بالنسبه لل association كما قال أخي عيسي أي أن ال association هي أي علاقة بين أي 2 classes ؛ مثال :

هناك علاقه بين الموظف و المدير فهي association و هناك علاقه بين الموظف و العميل فهي association .

و تكون هذه العلاقه one-to-many أو many-to-many أو ممكن one-to-one .

و تمثل هذه العلاقات كما بين الأخ عيسي ؛ بوضع أحد ال objects داخل الأخر .

مثلا : هناك علاقة association بين ال موظف و المدير : الموظف له مدير واحد و لكن المدير له أكثر من موظف :

class Emp {

	String empName;
	// other fields (variables ) such as age, salary ,etc.
	Manager manager 

	Emp (String name, float salary, Manager m ){
		empName = name;	
		// ....	
		manager = m;
	}

	String getName (){
		//
	}

	Manager getManager (){
		return manager;
	}
}

class Manager {
	ArrayList empUnderCtrl = new ArrayList();

	String name;

	Manager (String name ){
		this.name = name;
	}

	void addEmp (Emp e ){
		empUnderCtrl.add (e);
	}

	void removeEmp (Emp e){
		empUnderCtrl.remove (e);
	}
}
#5

بارك الله فيكم جميعا ,,

اقتباس
ابحث عن اي كتاب يشرح OO approach وسوف تجد هذه الأمور بالتفصيل

هل من الممكن اسم كتاب .. لاني لا املك المعرفة بافضل الكتب .. علما أني بحثت في منتدى الجافا ولم اجد .

الاخ daziplqa .. بارك الله فيك .. ورفع الله قدرك .

هذا هو بالظبط ما اريده .. طريقة التمثيل بالجافا ..

هالحين association فهمناها ,

بالنسبة لل Composition و aggregation سأكتب مثال .. وأريد ان اعرف هل المثال صحيح أو خطأ ..

مثال ال Composition :

المطلوب ان تربط بين الكلاس Book و Page .

الحل :

public class Page 
{
	 private int number;
	 public Page(Page p)
	 {
		 p.number=number;
	 }


}

public class Book
{
	private Page []P; 
	private int pageCounter;
	public Book(int pageNumber)
	{
		P=new Page[pageNumber];
		pageCounter=0;
	}
	public void setPages(Page p )
	{

		P[pageCounter]=new Page(p); //// Composition
		pageCounter++;
	}
}

الان .. لو فرضنا اننا نريد تمثيل الكود السابق .. ولكن بعلاقة الAggregation سأكتب كذا :

public class Book
{
	private Page []P; 
	private int pageCounter;
	public Book(int pageNumber)
	{
		P=new Page[pageNumber];
		pageCounter=0;
	}
	public void setPages(Page p )
	{

		P[pageCounter]=p; // Aggregation 
		pageCounter++;
	}
}

هل كلامي صحيح يا اخوان ..

تم تعديل هذه المشاركة بواسطة الشمري في 16 مارس 2007 في 22:16

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

السلام عليك أخي،

أولا أريد أن أقول أنك كما تعلم أن الفرق بين ال composition و ال aggregation فقط في أن في الأولي ال whole يتحكم في ال lifecycle لل part .

مثلا : عند حزف الكتاب من المكتبه فان كل الصفح التابعه له تحذف،،،،،،،،،،،،،،،،،

سؤال : هل يمكنك حذف object معين عند انتهاء object أخر في الجافا ؟؟

لا ، لا يمكن لأن الجافا ليس كال c++ ليس بها destructor .

أريد أن أقول لك يا أخي أن ال java ليس بها composition لأنك لا تستطيع أن تتحكم في حياة object من object أخر.

إذا لم تفهم لماذا فأرجو من الأخوه بالمنتدي شرحه لك.

#7

بالنسبه للكود : لم أفحصه بعد.

#8
اقتباس
سؤال : هل يمكنك حذف object معين عند انتهاء object أخر في الجافا ؟؟

لا ، لا يمكن لأن الجافا ليس كال c++ ليس بها destructor .

ماذا عن الgarbage collector .. أليس هو الذي يحذف الObject ... بالتالي اذا حذفه .. سيحذف كل مايحويه !!

اقتباس
أريد أن أقول لك يا أخي أن ال java ليس بها composition لأنك لا تستطيع أن تتحكم في حياة object من object أخر.

نحن في الجامعة لنا اسبوعين ندرس ال Composition وتطبيقها في الجافا .. وفي الاخير الجافا لاتدعم الComposition!!

أنا لا اشكك في كلامك أخي daziplqa ..

ولكن أحس الامور صارت ملخبطة عندي .. بداية من تضارب كلام الدكتور وكلام محاضر المادة .. مرورا بما أعيشه الان ..

اقتباس
بالنسبه للكود : لم أفحصه بعد.

أتمنى تـتأمله بأقرب وقت ممكن ,, ولا عليك أمر ,

بانتظاركم ,

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9

١- بالنسبه لل garbage collector ؛ فإنه يعمل وحده دون أي تدخل منك أي أنك لا تستطيع أن تسيطر عليه

ملاحظه : System.gc () مجرد طلب من ال garbage collector , و ليس إلزام له.

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

.

#10

الشمري إنسى شي إسمه c++ حاول تتعلم من جديد ، أنت تتعلم جافا انسى destructorوmulti inheritance و pointers ..الخ

بالنسبه للـcomposition :

composition aggregation , has-a, is-a , coupling , cohesion ,encapsulation inheritance , polymorpishem كلها OO principles

وافضل تصميم OO هي التي تتيح لنا أكبر امكانيه من خصائص OO approach ،

الجافا تدعم كل ماسبق ذكره واكثر ، ولكن هي لاتلزمك بان تعمل كل هذا !

composition موجوده في الجافا ،

عندما نقول

class A

{

private B b

}

فحياة الاوبجكت b هي مرهونه بحياة الاوبجكت A لذلك لايمكنك الوصول لـ b إلا عندما يكون هناك اوبجكت من A عندما تنتهي حياة اوبجكت من A بالتأكيد ستنتهي حياة b

بهذه الطريقه يمكنك مناداة methods موجوده في الكلاس B وتستفيد فيها ، فأنت من كلاسك ( A ) ذهبت إلى methods لكلاس آخر وهنا الفائده ،

فكر مثلاً بانك في نظام security ولاتريد أحد ان يعرف بأنك تستخدم نظام معين داخل هذا النظام العام في هذه الحاله باستطاعتك عمل ماتريد في الكلاس B

ووضعه في المنظومه العامه ( كلاس A في هذه الحاله )

الكلام كثير حول OO

مثلاً متى نستعمل A extends B ومتى نستعمل composition بدالها

راجع الكتب ، هناك كتاب Head First يشرح التصميم بOO لكنه غير المعتمد في الجامعه

اما الكتاب المتوفر بالجامعه

Object Oriented development using java اعتقد هذا اسم الكتاب

لونه أصفر ، بالتوفيق اخي

#11

السلام عليكم

لقد أخطأتُ.

الجافا بها composition كما قال الأخ عيسي

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

#12

بارك الله فيك اخوي عيسى .. و daziplqa

بدأت أستوعب ...

اقتباس
Object Oriented development using java

الكتاب المطلوب علينا

An Introduction To Object-Oriented Programming With JAVA (Fourth Edition).

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

جزاك الله خير .. سأبحث عن Object Oriented development using java مرة اخرى لعلي اجده ,,

ما قصرتوا .

تم تعديل هذه المشاركة بواسطة الشمري في 21 مارس 2007 في 18:17

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

هذا الموضوع مغلق.

مواضيع مشابهة