PDA

View Full Version : کاربرد رابطه بین دو کلاس



resident
سه شنبه 16 بهمن 1386, 22:46 عصر
بچه ها من یک مشکلی دارم و اونم اینه :
فرض کنید دو کلاس داریم که باهم رابطه دارن.(یک نمونه از کلاس A در کلاس B ایجاد می کنیم) و ما در فرمی از شیء کلاس B استفاده می کنیم. در اینجا چه استفاده ای می تونیم از رابطه بین دو کلاس A و B کنیم؟ اگه لطف کنید مثال بزنید ممنون میشم.

Mahdi.Kiani
سه شنبه 16 بهمن 1386, 23:25 عصر
بچه ها من یک مشکلی دارم و اونم اینه :
فرض کنید دو کلاس داریم که باهم رابطه دارن.(یک نمونه از کلاس A در کلاس B ایجاد می کنیم) و ما در فرمی از شیء کلاس B استفاده می کنیم. در اینجا چه استفاده ای می تونیم از رابطه بین دو کلاس A و B کنیم؟ اگه لطف کنید مثال بزنید ممنون میشم.

دو قسمت مشخص شده در متن فوق هیچ ربطی به هم ندارن. یعنی صرف اینکه یک نمونه از یک کلاس در یک کلاس دیگه بسازیم دلیل بر این نیست که حتما رابطه خاصی بین اونا بر قراره.
احتمالا منظور شما از این رابطه ، رابطه ارث بری هست.
بحث ارث بری بسیار بحث مفصلی هست ولی به طور خلاصه اینکه یک کلاس می تونه به عنوان کلاس base برای 1 یا n تا کلاس دیگه قرار بگیره. (ارث بری چند گانه در سی شارپ support نمی شود. به دلیل مشکلاتی که ایجاد می کرد. ک هبحث در این مورد از حوصله این بحث خارج است)
به عنوان مثال شما می خواین توی برنامتون پیاده سازی از ماشین ها و خواص اونا داشته باشین. خوب چیزی که مشخصه اینه که خیلی از خواص بین ماشین ها یکی هستند.
به عنوان مثال همه ماشین ها رنگ دارند. موتور دارن و.....
حالا دو سناریوی زیر را در نظر بگیرین
اول : پیاده سازی تمام خواص برای هر ماشین. یعنی هم برای ماشین GLX ، هم برای سمند و ... بیایم و مثلا خاصیت رنگ را در هر دوی اونا تعریف کنیم.
دوم : تمامی خواص مشترک را تحت یک آبجکت تعریف کنیم و تمامی کلاس های ماشین های مختلف این آبجکت را ازش ارث بری کنند.
خوب معلومه که در کد اول افزونگی کد داریم در حالی که در سناریوی دوم این افزونگی از بین رفته در حالی که همون هدف براورده میشه
این یک مثال بسیار ساده از ارث بری بود .. ارث بری یکی از بزرگترین شاه کار های برنامه نویسی oop هست..


اما بعید می دونم که باز هم منظور شما ارث بری بوده چون خیلی بعیده که کسی وارد برنامه نویسی شده باشه و این مفاهیم به گوشش نخورده باشه یا حداقل یک آشنایی مختصری نداشته باشه با اونا .. اونم زبانی مثل C#

resident
سه شنبه 16 بهمن 1386, 23:40 عصر
اما بعید می دونم که باز هم منظور شما ارث بری بوده
دقیقا.بنده هم منظورم ارث بری نبود.
مگه در فاز تحلیل وقتی کلید یک کلاس رو در دیگری قرار میدیم نمی گیم این دو با هم رابطه دارن و در فاز پیاده سازی برای برقراری این ارتباط به جای قراردادن کلید ، یک شیء از کلاس در دیگری ایجاد میکنیم!!!!!!


یعنی صرف اینکه یک نمونه از یک کلاس در یک کلاس دیگه بسازیم دلیل بر این نیست که حتما رابطه خاصی بین اونا بر قراره.
اگه منظورم کلاسهایی که در فاز تحلیل در میاریم باشه ، نه کلاسهایی که خودمون اضافه می کنیم ، چی؟ اونوقت میشه گفت؟
راستی منظورتون از رابطه خاص رابطه ای غیر از instance connection است؟

رضا عربلو
چهارشنبه 17 بهمن 1386, 00:11 صبح
هنگامیکه یک نمونه (Instance) از یک کلاس را در کلاس دیگری داشته باشیم به این نوع رابطه یک رابطه has-a و یا aggregation کفته می شود.
برای مثال دو کلاس ماشین (Car) و رادیو (Radio) در نظر بگیرید به راحتی می توانید بگویید که "ماشین شما یک رادیو دارد"، خوب همانطور که تحت الفظی هم می گوید car has-a radio،
و اما استفاده ای که از کلاس radio می توانید بکنید این است که برای encapsolation بهتر ، بهتر است آبجکت radio در کلاس car را بصورت private تعریف بکنید سپس برای کار با این رادیو متدهایی مد نظر خود را برای کار با این آبجکت رادیو، را expose کنید (مثلاً ()TurnOnRadio() , TurnOffRadio , ...)

resident
چهارشنبه 17 بهمن 1386, 00:15 صبح
هنگامیکه یک نمونه (Instance) از یک کلاس را در کلاس دیگری داشته باشیم به این نوع رابطه یک رابطه has-a و یا aggregation کفته می شود.
برای مثال دو کلاس ماشین (Car) و رادیو (Radio) در نظر بگیرید به راحتی می توانید بگویید که "ماشین شما یک رادیو دارد"، خوب همانطور که تحت الفظی هم می گوید car has-a radio،
و اما استفاده ای که از کلاس radio می توانید بکنید این است که برای encapsolation بهتر ، بهتر است آبجکت radio در کلاس car را بصورت private تعریف بکنید سپس برای کار با این رادیو متدهایی مد نظر خود را برای کار با این آبجکت رادیو، را expose کنید (مثلاً ()TurnOnRadio() , TurnOffRadio , ...)
ولی من فکر می کنم فرقی در پیاده سازی روابط aggrigation و instancr connection نباشه. در هر دو مورد همین کار رو می کنیم(ایجاد یک نمونه (Instance) از یک کلاس در کلاس دیگری )

Masoud_TB
چهارشنبه 17 بهمن 1386, 11:52 صبح
سلام
وقتی کلاسی با کلاس دیگر رابطه داره به این ترتیب که یک متغییر از کلاس A داخل کلاس B قرار داده به این رابطه Association می گویند.

وقتی کلاس Factor یک متغییر از کلاس Customer داخل خودش داره : Association

وقتی کلاس University یک رابطه با Student داره و در نتیجه لیستی از دانشجو های یک دانشگاه رو داریم .در حالتی که کلاس University یک مفهوم کامل است (حتی بدون دانشجو) : Aggregiation

و وقتی کلاس Factor و FactorItem رو داریم یعنی فاکتور بدون قلم فاکتور معنی ندارد آن وقت : Composition داریم.
به تصویر زیر نگاه کن:

رضا عربلو
چهارشنبه 17 بهمن 1386, 18:47 عصر
Association, Aggregation, Composition

When we have only one relationship between objects, that is called Association. Aggregation and Composition both are specialized form of Association. Composition is again specialize form of Aggregation.

Association is a relationship where all object have their own lifecycle and there is no owner. Let’s take an example of Teacher and Student. Multiple students can associate with single teacher and single student can associate with multiple teachers but there is no ownership between the objects and both have their own lifecycle. Both can create and delete independently.

Aggregation is a specialize form of Association where all object have their own lifecycle but there is ownership and child object can not belongs to another parent object. Let’s take an example of Department and teacher. A single teacher can not belongs to multiple departments, but if we delete the department teacher object will not destroy. We can think about “has-a” relationship.

Composition is again specialize form of Aggregation and we can call this as a “death” relationship. It is a strong type of Aggregation. Child object dose not have their lifecycle and if parent object deletes all child object will also be deleted. Let’s take again an example of relationship between House and rooms. House can contain multiple rooms there is no independent life of room and any room can not belongs to two different house if we delete the house room will automatically delete. Let’s take another example relationship between Questions and options. Single questions can have multiple options and option can not belong to multiple questions. If we delete questions options will automatically delete.

resident
جمعه 19 بهمن 1386, 07:51 صبح
قصدم از مطرح کردن این سوال انواع روابط نیست. میدونید منظورم چی بود؟
فرض کنید 2 کلاس پرسنل و عکس داریم و کلید کلاس پرسنل تو کلاس عکس است. حالا اگه فرمی داشته باشیم و بخواهیم مشخصات کارمند و عکسش رو از ورودی بگیریم ، تو اون فرم فقط باید یک آبجکت از کلاس عکس ایجاد کنیم و همه کارها(insert,…) رو با فیلدهای این کلاس انجام بدیم؟ مقدار کنترلهای ورودی مثل تکست باکس رو تو فیلدهای کلاس عکس بریزیم و بعد ازشون استفاده کنیم؟

اگه ما تو کلاس عکس به یک یا چند فیلد از کلاس پرسنل نیاز داشته باشیم، مثلا به فیلد شماره پرسنلی که بگیم این عکس برای پرسنل شماره فلان است اونوقت همینکه یک آبجکت از کلاس پرسنل در عکس ایجاد کنیم کافیه یا اینکه باید مجددا کد پرسنلی رو در کلاس تصویر تعریف کنیم و تابع get,set رو براش بنویسیم؟