خرداد ۷, ۱۳۹۸ Mostafa بدون دیدگاه

اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

زمانی که یک کلاس جاوایی حاوی اشاره گری به کلاس دیگری باشد (entity reference یا آبجکت از جنس کلا دیگر)، این امر تحت عنوان Aggregation یا رابطه ی یک طرفه ی Has-A شناخته می شود.

شرایطی را در نظر بگیرید که آبجکت Employee اطلاعات زیادی نظیر id، name، emailId و غیره … را دارد. این کلاس بعلاوه یک آبجکت به نام address دارد که اطلاعات خود نظیر اسم شهر (city)، استان (state)، کشور (country)، کد پستی (zip code) و غیره را مانند زیر شامل می شود.

class Employee{  
int id;  
String name;  
Address address;//Address is a class  
...  
}

در چنین شرایطی، Employee داخل خود یک اشاره گر به نام address به کلاس (موجودیت) Address دارد. بنابراین رابطه به این صورت است: Employee Has-A address که یک رابطه ی یک طرفه ی کل به جز محسوب می شود.

چرا باید از Aggregation استفاده کرد؟

  • قابلیت استفاده ی مجدد از کد (code reusability)

در مثال جاری، یک آبجکت (اشاره گر) از جنس کلاس Operation در کلاس Circle تعریف کرده ایم.

class Operation{  
 int square(int n){  
  return n*n;  
 }  
  }
class Circle{  
 Operation op;//aggregation  
 double pi=3.14;  
 double area(int radius){  
   op=new Operation();  
   int rsquare=op.square(radius);//code reusability (i.e. delegates the method call).  
   return pi*rsquare;  
 }
 public static void main(String args[]){  
   Circle c=new Circle();  
   double result=c.area(5);  
   System.out.println(result);  
 }  
}

خروجی:

78.5

چه زمانی باید از Aggregation استفاده کرد؟

  • قابلیت استفاده ی مجدد کد زمانی با aggregation بهترین نتجیه را می دهد که رابطه ی is-a (جز به کل) وجود نداشته باشد.
  • ارث بری (Inheritance) باید تنها زمانی استفاده شود که رابطه ی is-a در تمام و سرتاسر چرخه ی حیاط (lifetime) آبجکت های درگیر در رابطه حفظ شود، در غیر این صورت aggregation بهترین گزینه می باشد.

درک مفهوم aggregation به وسیله ی یک مثال کاربردی

در مثال جاری، Employee دارای آبجکتی از جنس کلاس Address می باشد. آبجکت address اطلاعات و داده های اختصاصی خود نظیر شهر (فیلد city)، استان (state)، کشور (country) و غیره … می باشد. در چنین شرایطی، رابطه بدین صورت می باشد: Employee HAS-A address یا کلاس address دارای رابطه ی جز به کل با Employee می باشد.

فایل: Address.java

public class Address {  
String city,state,country;  
public Address(String city, String state, String country) {  
    this.city = city;  
    this.state = state;  
    this.country = country;  
}  
}

فایل: Emp.java

public class Emp {  
int id;  
String name;  
Address address;  
public Emp(int id, String name,Address address) {  
    this.id = id;  
    this.name = name;  
    this.address=address;  
}  
void display(){  
System.out.println(id+" "+name);  
System.out.println(address.city+" "+address.state+" "+address.country);  
}  
public static void main(String[] args) {  
Address address1=new Address("gzb","UP","india");  
Address address2=new Address("gno","UP","india");  
Emp e=new Emp(111,"varun",address1);  
Emp e2=new Emp(112,"arun",address2);  
e.display();  
e2.display();   
}  
}

خروجی:

111 
varun
gzb UP india
112 arun
gno UP india

 

 


برچسب ها
نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.