ارث بری استفاده ی مجدد از کلاس توسط وراثت

Slides:



Advertisements
Similar presentations
CMSC 202 Inheritance. Aug 6, Object Relationships An object can have another object as one of instance variables. The Person class had two Date.
Advertisements

معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
Definition. قانون بیز P(b|a) = P(a|b)P(b)/P(a) P(b|a) = P(a|b)P(b)/P(a) این قانون برای استنتاج آماری استفاده می شود. این قانون برای استنتاج آماری استفاده.
Decision Tree.
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
پیدا کردن شواهد علمی. منابع بررسي متون  كتاب ها  گزارش ها  مجله هاي علمي peer reviewed  ايندكس مديكوس  داده هاي الكترونيكي  بانك هاي الكترونيكي.
1 Network Address Translation (NAT). 2 Private Network شبکه خصوصی شبکه ای است که بطور مستقیم به اینترنت متصل نیست در یک شبکه خصوصی آدرس های IP به دلخواه.
Lesson four Grade three
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
به نام خدا برنامه سازی سمت سرور (php)
CMSC 202 Inheritance I Class Reuse with Inheritance.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 8 Chapters 8 & 9.
مظفر بگ محمدی دانشگاه ایلام Generics. کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا.
بسم الله الرحمن الرحیم برنامه سازی پیشرفته ( جاوا ) مدرس : محمد غمگسار
درس مهندسی اینترنت – مهدی عمادی مهندسی اینترنت برنامه‌نویسی در اینترنت Object Oriented Programming Concepts in JAVA.
پیاده سازی کنترلر PC/104. Contents PC/104 پیاده سازی کنترلر HILتست 1.
آشنايي با سيستم اعداد.
[c.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
نظریه رفتار برنامه ريزي شده Theory of Planned Behavior
هیدروگراف(Hydrograph) تهیه : دکتر محمد مهدی احمدی
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
ارث بری استفاده ی مجدد از کلاس توسط وراثت
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
برنامه نویسی پیشرفته مقدمات.
مظفر بگ محمدی دانشگاه ایلام
فصل دوم جبر بول.
به نام حق مبحث: ارث بری Inheritance.
Inheritance I Class Reuse with Inheritance
بررسی قطبش در لیزر های کاواک عمودی گسیل سطحی(vcsel)
VALUE ADDED TAX. VALUE ADDED TAX چیدمان ارائه : 1.تعریف مالیات 2.انواع مالیات 3.هدف از مالیات 4.مالیات در دولت ایران از قبل تا کنون 5.مفهوم مالیات.
مقدمه اي بر مهندسي نيازمنديها
SSO Single Sign-on Systems
آموزش و یادگیری Education and Training
آشنایی با پایگاه داده mysql
مدارهای منطقی فصل سوم - خصوصیات توابع سويیچی
ارث بری استفاده ی مجدد از کلاس توسط وراثت
CMSC 202 Inheritance.
Class Reuse with Inheritance
Intro تمام موجودات باید قبل از تقسیم DNA خود را همانندسازی کنند
به نام خدا فصل هفتم وراثت.
دینامیک سیستمهای قدرت مدرس: دکتر مهدی بانژاد
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
Ali Karimpour Associate Professor Ferdowsi University of Mashhad
نظریه رفتار برنامه ريزي شده Theory of Planned Behavior
آشوب در سیستمهای دینامیکی
راهنمای استفاده از ابزار Mailings در Ms Word
پشته و صف پیوندی Give qualifications of instructors: DAP
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
کاربرد کامپیوتر در داروخانه
جستجوی منابع الکترونیک
مظفر بگ محمدی دانشگاه ایلام
به نام خدا Koha برنامه.
فصل ششم مدارهای ترتیبی.
ساختمان داده‌ها درختان و درختان دودویی
دکتر مظفر بگ محمدی دانشگاه ایلام
مظفر بگ محمدی دانشگاه ایلام
سخت افزارهای امنیتی Hardware Security تهیه و ارایه : یونس جوان.
Uniprocessor Scheduling
درس سوم مفهوم سازی در فیزیک
فصل 8 –Process and Deployment
برنامه ریزی خطی پیشرفته (21715( Advanced Linear Programming Lecture 7
kbkjlj/m/lkiubljj'pl;
پشته و صف پیوندی Give qualifications of instructors: DAP
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
Presentation transcript:

ارث بری استفاده ی مجدد از کلاس توسط وراثت مظفر بگ محمدی دانشگاه ایلام

استفاده ی مجدد از کلاس ما دیدیم که چگونه کلاسها و کد آنها در ترکیب استفاده شدند. در ترکیب، شی یک یا چند شی دیگر را به عنوان متغییر استفاده می کرد. ترکیب رابطه ی ”داشتن“ را مدل می کند. هر Person یک نام (String) دارد. ماشین موتور دارد. کتاب صفحه دارد.

ارتباط اشیاء شی می تواند نوع خاصی از یک شی دیگر باشد. ماشین یک وسیله ی نقلیه است. مثلث یک چند ضلعی است. دانشجو از نوع Person است. این نوع ارتباط تحت نام ”نوعی از“ شناخته می شود. در OOP، این مدل ارتباطی توسط تکنیک برنامه نویسی وراثت مدل می شود. وراثت با اضافه کردن به کلاسهای جاری، کلاسهای جدیدی ایجاد می کند. یعنی کلاس جاری بدون دستکاری استفاده می شود.

وراثت وراثت از تکنیکهای اصلی OOP است. نحوه ی استفاده از وراثت: ابتدا یک کلاس عمومی (پایه) تعریف می شود. سپس نسخه های خصوصی تر کلاس را با اضافه کردن متدها و متغییرهای جدید تعریف می کنیم. می گوییم که نسخه ی خصوصی متدها و متغییرهای نسخه ی عمومی کلاس پایه را به ارث برده است. 4

کلاسهای مشتق شده معمولاً هنگام طراحی بعضی کلاسها وراثت بصورت طبیعی خود را نمایان می کند: در برنامه ی حقوق کارمندان یک اداره دو نوع کارمند داریم: ساعتی و حقوقی کارمندان ساعتی می توانند پاره وقت یا کامل باشند. کارمندان با حقوق ماهانه ی مشخص نیز به دو دسته ی فنی و اداری تقسیم می شوند. 5

کلاسهای مشتق شده تمام کارمندان مشخصات مشترکی دارند: اسم و تاریخ استخدام متدهای دسترسی و تغییر نام و تاریخ استخدام بعضی کارمندان مشخصات خصوصی تری دارند: میزان پرداخت کارمند ساعتی: دستمزد هر ساعت کار کارمند پیمانی: میزان پایه ی حقوق نحوه ی محاسبه میزان پرداختی برای این دو نوع کارمند متفاوت است. 6

وراثت و OOP وراثت نوعی انتزاع است که به منظور: اشتراک مشابتهای بین کلاسها (مثل نام و تاریخ استخدام) و حفظ تفاوتها (مثل نحوه محاسبه ی میزان پرداختی) انجام می شود. وراثت به ما اجازه می دهد که کلاسها را بصورت خانواده هایی از نوع مرتبط دسته بندی کنیم و متدها و خصوصیات مشترک آنها را به اشتراک بگذاریم.

کلاسهای عمومی می توان برای تمام کارمندان یک کلاس عمومی به نام Employee تعریف کرد. سپس می توان کارمندان ساعتی و پیمانی را از روی این کلاس تعریف کرد. سپس می توان از کلاس HourlyEmployee برای تعریف کلاس PartTimeHourlyEmployee استفاده کرد و .... 8

A Class Hierarchy 9

کلاس Employee /** Class Invariant: All objects have a name string and hire date. A name string of "No name" indicates no real name specified yet. A hire date of Jan 1, 1000 indicates no real hire date specified yet. */ public class Employee { private String name; private Date hireDate; // no-argument constructor public Employee( ) name = "No name"; hireDate = new Date("Jan", 1, 1000); //Just a placeholder. } // alternate constructor public Employee(String theName, Date theDate) { /* code here */ } // copy constructor public Employee(Employee originalObject) { /* code here */ } (continued)

کلاس Employee // some accessors and mutators public String getName( ) { /* code here */ } public Date getHireDate( ) { /* code here */ } public void setName(String newName) { /* code here */ } public void setHireDate(Date newDate) { /* code here */ } // everyone gets the same raise public double calcRaise( ) { return 200.00; } // toString and equals public String toString( ) { /* code here */ } public boolean equals(Employee otherEmployee) { /* code here */ } } // end of Employee Class

کلاسهای مشتق شده چون کارمند ساعتی نوعی از کارمند است، می گوییم که از کلاس Employee مشتق شده است. کلاس مشتق شده را می توان با اضافه کردن متد یا خصوصیت به یک کلاس جاری تعریف نمود. کلاس مشتق شده از کلاس مبنا مشتق می شود. هنگام تعریف کلاس مشتق شده باید عبارت extends BaseClass استفاده شود. public class HourlyEmployee extends Employee 12

کلاس HourlyEmployee /** Class Invariant: All objects have a name string, hire date, nonnegative wage rate, and nonnegative number of hours worked. */ public class HourlyEmployee extends Employee { // instance variables unique to HourlyEmployee private double wageRate; private double hours; //for the month // no-argument Constructor public HourlyEmployee( ) { /* code here */} // alternative constructor public HourlyEmployee(String theName, Date theDate, double theWageRate, double theHours) { /* code here */} // copy constructor public HourlyEmployee(HourlyEmployee originalHE) { /* code here */} (continued)

کلاس HourlyEmployee // accessors and mutator specific to HourlyEmployee public double getRate( ) { /* code here */ } public double getHours( ) { /* code here */ } public void setHours(double hoursWorked) { /* code here */ } public void setRate(double newWageRate) { /* code here */ } // toString and equals specific for HourlyEmployee public String toString( ) { /* code here */ } public boolean equals(HourlyEmployee otherHE) { /* code here */ } } // end of HourlyEmployee Class

زیر کلاس به کلاس مشتق شده زیر کلاس هم می گویند. کلاس والد تحت اسم کلاس مبنا یا کلاس پایه نیز شناخته می شود. زیر کلاس موارد زیر را از کلاس مبنا به ارث می برد: متدهای عمومی متغیرهای عمومی و خصوصی متغیرهای عمومی و خصوصی استاتیک کلاس مشتق شده می تواند متغییر، متغییر استاتیک و متد داشته باشند. 15

استفاده از HourlyEmployee public class HourlyEmployeeExample { public static void main(String[] args) HourlyEmployee joe = new HourlyEmployee("Joe Worker", new Date(1, 1, 2004), 50.50, 160); // getName is defined in Employee System.out.println("joe's name is " + joe.getName( )); // setName is defined in Employee System.out.println("Changing joe's name to Josephine."); joe.setName("Josephine"); // setRate is specific for HourlyEmployee System.out.println(“Giving Josephine a raise”); joe.setRate( 65.00 ); // calcRaise is defined in Employee double raise = joe.calcRaise( ); System.out.println(“Joe’s raise is “ + raise ); }

بازنویسی یک متد کلاس مشتق شده می تواند کلاسهای به ارث برده شده را بازنویسی کند. برای بازنویسی یک متد، آن متد در کلاس مشتق شده دوباره تعریف و پیاده می شود. بعنوان مثال، کلاس HourlyEmployee روش خود را برای محاسبه ی افزایش حقوق دارد. لذا، متد calcRaise( ) از کلاس Employee را دوباره باز نویسی می کند. 17

مثال بازنویسی HourlyEmployee joe = new HourlyEmployee( ); public class Employee { .... public double calcRaise( ) { return 200.00; } } public class HourlyEmployee extends Employee . . . . // overriding calcRaise – same signature as in Employee public double calcRaise( ) {return 500.00; } حالا کد: HourlyEmployee joe = new HourlyEmployee( ); double raise = joe.calcRaise( ); متد calcRaise را از کلاس HourlyEmployee فراخوانی می کند. جهت بازنویسی یک متد در کلاس مشتق شده، امضای متد در کلاس مشتق شده باید با امضای متد در کلاس پایه یکسان باشد.

بازنویسی و بارگذاری مجدد دقت کنید که بازنویسی و بارگذاری مجدد متد را با هم قاطی نکنید. در بازنویسی متد، امضای متد در کلاس مشتق شده با امضای متد در کلاس پایه یکسان است. اما اگر امضای متدی در کلاس مشتق شده یا در کلاس پایه با امضای متد در کلاس پایه متفاوت باشد (اما اسم متدها یکسان باشد)، می گوییم که متد دوباره بارگذاری شده است. دقت کنید که در هر دو حالت، کلاس مشتق شده به متد کلاس پایه دسترسی دارد و می تواند از آن استفاده کند. 19

اصلاح کننده ی final اگر کلمه final قبل از تعریف متد قرار گیرد، متد را نمی توان در کلاسهای مشتق شده بازنویسی کرد. اگر کلمه final قبل از تعریف کلاس قرار گیرد، نمی توان از آن کلاس اشتقاق نمود و ارث بری کرد. 20

استفاده از متغییرهای خصوصی کلاس پایه در متدهای کلاس مشتق شده، نمی توان متغییر خصوصی را با اسم فراخوانی کرد. یک شی از نوع HourlyEmployee به متغییر hireDate خصوصی دسترسی ندارد اگر چه از کلاس پایه ی Employee ارث بری نموده است. اما با استفاده از متدهای accessor و mutator تعریف شده در کلاس پایه، می توان در کلاس مشتق شده به متغییرهای کلاس پایه دسترسی داشت. یک شی از نوع HourlyEmployee با استفاده از متدهای getHireDate و setHireDate به متغییر hireDate خصوصی دسترسی دارد. 21

استفاده از متغییرهای خصوصی کلاس پایه ... اگر کلاس مشتق شده به متغییرهای خصوصی دسترسی داشته باشد، هر کس که بخواهد اصول کپسوله سازی را نقض کند، می تواند با استفاده از وراثت از روی کلاس پایه یک کلاس مشتق شده بسازد و به متغییرهای خصوصی کلاس پایه دسترسی داشته باشد. یعنی ممکن است به اشتباه یا عمداً متغییرهای خصوصی را بصورت نادرست تغییر داد. 22

دلیل عدم ارث بری متدها در کلاسهای مشتق شده متدهای خصوصی کلاس پایه نیز مثل متغییرهای خصوصی قابل ارث بری نیستند. متد خصوصی کاملاً غیر قابل دسترسی است مگر این که بصورت غیر مستقیم صدا زده شود. یعنی ما متدی عمومی از کلاس پایه را صدا بزنیم و داخل آن متد یک متد خصوصی کلاس پایه صدا زده شود. این موضوع ایجاد اشکال نمی کند زیرا متدهای خصوصی بعنوان متد کمکی تعریف شده اند و متد اصلی نیستند. 23