menusearch
javapro.ir

♨️ جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید

جستجو
پنج شنبه ۶ دی ۱۴۰۳ | ۱۳:۳۹:۲۷
۱۳۹۵/۱۱/۲ شنبه
(3)
(0)
♨️ جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید
♨️ جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید

فهرست جلسات دوره مقدماتی جاوا

مقدمه اول | جاوا چیست؟

مقدمه دوم | تاریخچه جاوا

مقدمه سوم | ویژگی‌های زبان جاوا

جلسه اول | راهنمای دانلود و نصب JDK

جلسه دوم | اجرای یک برنامه جاوا در Notepad

جلسه سوم | راهنمای دانلود و نصب Eclipse

جلسه چهارم | ساخت اولین برنامه جاوا در Eclipse

جلسه پنجم | متغیر ها در جاوا

جلسه ششم | تغییر فونت محیط Eclipse

جلسه هفتم | عملگر‌های پایه ای جاوا

جلسه هشتم | دستورات شرطی

جلسه نهم | اشیا و کلاس ها

جلسه دهم | ورودی گرفتن

جلسه یازدهم | حلقه‌های کنترلی

جلسه دوازدهم | کلمه کلیدی static

جلسه سیزدهم | کلاس Math

جلسه چهاردهم | کلاس String

جلسه پانزدهم | آرایه‌های یک بعدی

جلسه شانزدهم | کنترل سطح دسرسی (Modifiers)

جلسه هفدهم | متدها در جاوا

جلسه هجدهم | کلمه کلیدی this

جلسه نوزدهم | کلاس‌های داخلی

جلسه بیستم | ارث بری در جاوا

جلسه بیست و یکم | کلمه کلیدی final

جلسه بیست و دوم | Overriding در جاوا

جلسه بیست و سوم | Polymorphism( چند ریختی)

جلسه بیست و چهارم | چندریختی را بهتر یادبگیرید

جلسه بیست و پنجم | Abstraction( انتزاع)

جلسه بیست و ششم | Encapsulation(کپسوله سازی)

جلسه بیست و هفتم | اینترفیس (Interface)

جلسه بیست و هشتم | کلاس Random

جلسه بیست و نهم | Exceptions (استثناها)

جلسه سی ام | کار با فایل در جاوا(Files and I/O)

جلسه سی و یکم | کلاس InputStreamReader

جلسه سی و دوم | کلاس OutputStreamWriter

جلسه سی و سوم | کلاس BufferedReader

جلسه سی و چهارم | کلاس BufferedWriter

جلسه سی و پنجم | Serialization در جاوا

جلسه سی و ششم | چندنخی(Multithreading)

جلسه سی و هفتم | آرایه دو بعدی در جاوا

جلسه سی و هشتم | کلاس ArrayList در جاوا

جلسه سی و نهم | Non Access Modifier در جاوا

 

 

دوره رایگان مقدماتی زبان جاوا

 

 

اگه میخوای موارد زیر از جاوا رو بدونی جلسه بیست و چهارم رو دانلود کن
چندریختی را بهتر یادبگیریم
این آموزش مکملی برای درک بهتر مفهوم چندریختی است
با مثال های بیشتر سعی شده این مفهوم روشن تر شود



جلسه قبل در مورد چندریختیصحبت کردیم برای درک بهتر این مبحث مهم شی گرایی جلسه ای دیگر را نیز به چندریختی اختصاص داده ایم.قبل از مطالعه این جلسه، جلسه قبل یعنی چندریختی در جاوا را مطالعه کنید.


پلی مورفیسم یا چندریختی یکی از مفاهیم شی گرایی در جاوا است.این مفهوم تا حدودی دشوار و گیج کننده است!!! به همین خاطر یک جلسه دیگه هم برای بررسی این مفهوم چغر و بد بدن قرار داده ایم :-)


دلیل گیج کننده بودن این مفهوم این است که نسبت به سایر مفاهیمی که تا الان بررسی کردم انتزاعی است،با این حال شما میتونید در پلی مورفیسم استاد بشید و برآن مسلط بشید و به کمر خاکش کنید 😊


برای یادگیری بهتر چندریختی یا هر مفهوم جاوای دیگر باید تمرین و مثال عملی زیادی حل کنید تا یواش یواش مفهومش دستتون بیاد.چون امکان داره توضیحات تئوری جز گیج تر کردن شما دست آورد دیگه ای نداشته باشه.


بیایید صدای گربه را بررسی کنید!!!!! گربه یک عمل صداکردنی داره و صدای آن میو میو...!!!! هستش سگ هم صدا داره و عمل صدا کردن سگ واق واق...... هستش!!!! پس قبول میکنید که هر حیوانی یک عمل صدا کردنی دارد که بین همه ی‌ آنها مشترک هستش اما با صدایی متفاوت؟!!!!!!!!!!!!!!!!!


عمل صدا کردن را یک متد به نام ()makeSound در نظر میگیریم .
تفاوت صدا گربه با سگ و سایر حیوانات را دستور درون متد در نظر میگیریم.
یعنی یک متد که نام مشترکی برای همه حیوانات دارد اما دستوری ( تفاوت صدا) متفاوت.
مثلا متد ()makeSound را برای حیوانات بصورت زیر بررسی میکنیم:


گربه

 

public void makeSound(){
   
   System.out.println("Miu Miu....");
   
}


سگ

 

public void makeSound(){
   
   System.out.println("Vagh Vagh....");
   
}



مرغ

 

public void makeSound(){
   
   System.out.println("ghot ghot....");
   
}

 


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

 

چندریختی یا پلومورفیسم هم این مفهوم را بیان میکند،چندریختی میگه یک حیوان میتونه در شکل های گوناگون ظاهر شود.مثلا یک حیوان متد ()makeSound و عمل صدا کردن را دارا است.حالا این متد با توجه به نوع حیوان عمل (صدای) متفاوتی را به نمایش میگذارد.


در چندریختی تمرکز ما روی متدهای مشترک با دستورات متفاوت است.


مثل متد صدا کردن که بین همه حیوانات مشترک هست اما برای هر حیوان دستور صدا متفاوت است.


در چندریختی مثلا وقتی کلاس حیوان میخواد در شکل کلاس گربه،کلاس سگ،کلاس مرغ ظاهر شود متدهایی نظیر عمل صدا کردن که بین گربه و سگ و مرغ مشترک هست در همه این کلاس ها override (بازنویسی) می‌شود.یعنی متد صدا کردن که درون کلاس حیوان هست با توجه به نوع صدا و دستور هر حیوان درون کلاس های گربه و سگ و مرغ override می‌شود.


کلاس Animal را در زیر مشاهده میکنید که متد makeSound در بدنه آن پیاده سازی شده است که یک دستور کلی را اجرا میکند. این یعنی همه حیوانات یک عمل صدا کردنی را دارند اما نوع صدا کردن باتوجه به نوع حیوان تغییر میکند.خب حالا ما میخواهیم متد ()makeSound در کلاس Animal صدای گربه را بدهد. برای این کار باید یک کلاس تعریف کنیم به نام Cat که کلاس Animal را به ارث می‌برد. متد makeSound کلاس Animal را در کلاس Cat override (بازنویسی) میکنیم یعنی همون متد با همون نام با همون پارامتر و با همان نوع اما بادستوری متفاوت را در کلاس فرزند یعنی Cat پیاده سازی میکنیم.

 

class Animal {
   public void makeSound() {

       System.out.println("animal sounds");
   }

}

class Cat extends Animal {
   public void makeSound() {

       System.out.println("miu miu");
   }

}


•    ما برای این که متد ()makeSound کلاس Animal صدای گربه بدهد یعنی کلاس Animal در زمینه صدا کردن به شکل گربه دربیاد متد makeSound را درون کلاس Cat، override کرده ایم.


•    حالا ما باید کاری کنیم که وقتی یک شی از کلاس Animal ایجاد کردیم اون شی زمانی که متد makeSound را صدا میزند بجای پیام "animal sounds" پیام "miu miu" را در خروجی چاپ کند.یعنی شی کلاس Animal به شکل شی کلاس Cat ظاهر شود. یعنی وقتی شی کلاس Animal میخواد عمل صدا کردن را انجام دهد بگه “miu miu” خب چطور باید این کار را انجام بدیم؟


پس رسالت این است که ما کلا با شی کلاس پدر یعنی Animal سروکار داریم و کلاس های فرزند نظیر کلاس گربه که کلاس حیوان را به ارث برده است در عمل فقط یک حالت انتزاعی و پنهان هستند و ما تنها طرف حسابمون کلاس و شی پدر هستش.


قبل از این که ادامه این مثال را بررسی کنیم بزارید تا یک مثال از دنیای واقعی برای درک این موضوع برای شما بگم:
ایا شما پرنده ٌطرقه را میشناسید؟طرقه پرنده ای خوش آواز هستش که اواز آن تقلیدی از آواز سایر پرندگان است.یعنی طرقه گاهی به شکل بلبل درمیاد و اواز بلبل را سر میدهد گاهی شبیه قناری ظاهر میشه و مثل قناری میخواند گاهی به شکل پرنده ای دیگر در می‌اید و میخواند.

پرنده طرقه شبیه به گنجشک و خاکستری رنگ است. ما در آواز خوانی طرقه هیچ ظاهری و شمایلی از قناری خوش رنگ و بلبل و .... نمی‌بینیم گویی قناری و بلبل و... در کالبد طرقه پنهان شده اند و با وجود این که صدای سایر پرندگان را میشنویم اما طرف حساب ما تنها پرنده طرقه هست. یعنی میتوان گفت پرندگان دیگر طرقه را به ارث برده اند و طرقه پدر آنها هستش و متد آواز خوانی طرقه در بدنه همه کلاس های فرزندان بازنویسی شده و طرقه میتونه از این طریق به شکل هر کدوم از پرنده ای که دوست دارد ظاهر شود و اواز بخواند. در چندریختی هم دقیقا همین طور هست همه فرزندان کلاس پدر در کالبد پدر پنهان شده اند و پدر با دستور خاص خود به شکل هر فرزندی که دوست داشت درمی آید. تغییر شکل کلاس پدر به شکل کلاس فرزند در قالب متد رخ می‌دهد. خب ما در پلی مورفیسم هم تنها با شی کلاس پدر سرو کار داریم و شی کلاس پدر تنها به تمام ویژگی ها و رفتار های کلاس خودش دسرسی دارد با این تفاوت که هر متدی از کلاس پدر که در کلاس فرزند override یا بازنویسی شده هنگام صدا زدن آن به جای اجرای دستور متد پدر دستور متد فرزند اجرا می‌شود. مثلا متد ()makeSound که درون کلاس Animal هستش و دستور "Animal Sounds " را در خروجی چاپ میکند اگر این متد در کلاس یکی از فرزندان مثلا کلاس Cat، override یا بازنویسی شود و دستور درون این متد در کلاس Cat به چاپ پیام "miu miu" تغییر کند.شی ای که به روش چند ریختی (پلی مورفیسم) از کلاس پدر یعنی Animal ایجاد میشود هنگام صدا زدن متد ()makeSound بجای چاپ پیام "animal sounds" که درون کلاس پدر یعنی Animal قرار دارد دستور چاپ پیام "miu miu" این متد که درون کلاس فرزند یعنی Cat قرار دلرد را اجرا میکند.دقیقا شبیه پرنده طرقه که ما در ظاهر با طرقه سر و کار داریم اما طرقه آواز قناری را میخواند.
خب تا اینجا شما بصورت تئوری با مفهوم چندریختی آشنا شدید حالا میخواهیم کد مثال بالا که شی حیوان میخواد به شکل شی گربه دربیاد را بصورت عملی پیاده سازی کنیم:


در مثال زیر شی سازی حالت عادی که از کلاس ها ایجاد میکردیم را مشاهده میکنید:

 

package polymorphism_JavaPro;

class Animal {
   public void makeSound() {

       System.out.println("animal sounds");
   }

   public void eat() {

       System.out.println("animal eat");
   }
}

class Cat extends Animal {
   public void makeSound() {

       System.out.println("miu miu");
   }

}

public class Test {

   public static void main(String[] args) {
       Animal a1=new Animal();
       a1.eat();
       a1.makeSound();

   }
}


خروجی:

 

animal eat
animal sounds


•    در این مثال یک شی به نام a1 از کلاس Animal ایجاد کرده ایم.


•    شی a1 به تمام ویژگی ها و رفتارهای کلاس Animal دسرسی دارد.


•    از طریق شی a1 متدهای ()makeSound و ()eat را صدا زده ایم.


•    همان طور که مشاهده میکنید دستورات اجرا شده درون این دو متد کاملا متعلق به کلاس Animal هستش.


•    حالا قصد داریم کلاس Animal در شکل کلاس Cat ظاهر شود مثلا وقتی شی ای از کلاس Animal ساختیم آن شی صدای گربه را دربیارد. برای این کار کلاس Cat باید کلاس Animal را به ارث ببرید و متدی (عمل صدا کرد) makeSound() کلاس Animal را درون کلاس Cat بازنویسی و override کنیم. حالا وقت شی ساختن از کلاس Animal میرسه که این شی همان طور که گفتیم تنها و تنها و تنها!!!!!!! به متغیرها و متدهای کلاس پدر یعنی Animal دسرسی دارد.یعنی مثل روان عادی که شی یک کلاس میتونه به متغیرها و متدهای کلاسش دسرسی پیدا کند و فقط تنها تفاوت این است که شی کلاس Animal هنگام صدا زدن متدهایی از کلاس Animal که در کلاس فرزندش یعنی Cat، override شده بجای اجرای دستورات خود متد پدر ،دستور override شده اجرا می‌شود:
•    خب ما تا اینجا کلاس Animal و کلاس Cat را ایجاد کرده ایم و کلاس Cat کلاس Animal را به ارث برده است و متد makeSound درون کلاس Cat ،override شده است حالا وقت شی ساختن از کلاس Animal به روش چندریختی هست برای این کار در جلسه قبل شی ساختن یک کلاس بصورتی که در شکل شی کلاس دیگر ظاهر شود را یادگرفیتیم اما دوباره مروری میکنیم:

 

سازنده کلاس فرزند + new + = + نام شی + نام کلاس پدر


شی ساختن به روش چندریختی یعنی وقتی شی کلاس پدر میخواد در شکل شی کلاس فرزند ظاهر شود بصورت بالاست.

 

......ادامه این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)

 


این جلسه آموزشی را می‌توانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.


آموزش آسان و ساده زبان برنامه نویسی جاوا

لینک دانلود

 

 


نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.
  بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا
  بخش هایی از کتاب جلسه بیست و چهارم -  چندریختی را بهتر یادبگیرید در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا
 بخش هایی از کتاب جلسه بیست و چهارم -  چندریختی را بهتر یادبگیرید در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا
   بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و چهارم - چندریختی را بهتر یادبگیرید در جاوا
نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

3 نظر
فروغ
سه شنبه نهم اسفند ۰۱
پاسخ
()
()
فروغ
سلام و خدا قوت آقا واقعا مرسي سايتتون حرف نداره.
پاسخ مدیر سایت
خوش حالم مفید بوده :)
پاسخ مدیر سایت
mojtaba sh
شنبه بیستم فروردین ۰۱
پاسخ
()
()
mojtaba sh
با عرض سلام و خداقوت اقا يه سوال، ميتونيد براي يک مورد پيچيده تر مثال بزنيد ؟ خب اينجا عملا وقتي ارث بري ميکني دباره همون تابع رو مياييم مينويسيم ديگه چه کاريه خب .... شما بدون نياز به ارث بري کردن از کلاس پدر هم ميتوني همون توابع رو همينجوري که اومديم نوشتيم بياييم مستقيم با ايجاد کلاس هاي cat و dog و .... هم بنويسيم اين به چه دردي ميخوره، کنار هر مفهوم کاربردش رو هم تو دنياي پيچيده برنامه نويسي بگين که مثلا کجا کاربرد داره فقط جان هرکسي دوست دارين مثال ساده نيارين پيچيده باشه لطفا ميخوام کاربردش رو متوجه بشم هرجا سرچ ميزنيم راجع به مفاهيمي مثل Polymorphism يا interface و .... ميان يه توضيح خيلي ساده نمايش دادن يه متن ميزنن و تمام در حالي که تو پروژه هاي (يکم ) پيچيده تر ميان مثلا از interface يه جور ديگه استفاده ميکنن مثل interface کال بک (callBack) جون هرکسي دوست دارين کنار اين شيوه تدريس (آموزشو پرورشي ما)، يه مثال واقعي تر يه مثال کاربردي تر بزنين که شکل هاي استفاده ازين مفاهيم رو بتونيم قشنگ درک کنيم دمتون گرم
پاسخ مدیر سایت
سلام اینجا مفاهیم پایه آموزش داده شده است ،برای درک بهتر شما باید آموزش پروژه محور ببینید
پاسخ مدیر سایت
محمد حسین حسنی
شنبه بیست و هفتم خرداد ۹۶
پاسخ
(0)
()
محمد حسین حسنی
خیلی ممنون بابت آموزش های خوبتون خیلی دقیق و واضح توضیح دادین
پاسخ مدیر سایت
از نظر لطف شما سپاسگزاریم
پاسخ مدیر سایت
هدر سایت
دوره برنامه نویسی Spring Core
مشاهده سرفصل ها و ثبت نام در دوره Spring Boot جاواپرو  [کلیک کنید]
آموزش پروژه محور اسپرینگ بوت(Spring Boot)-سیستم دانشگاه
ثبت نام در دوره آموزش Spring security
دوره معماری میکروسرویس ها (Microservices) با استفاده از Spring Boot و Spring Cloud
دوره پرتاب | آموزش پیش نیازهای برنامه نویسی
دوره آموزش مبانی زبان برنامه نویسی جاوا
دوره آموزش مفاهیم پیشرفته زبان برنامه نویسی جاوا
مقدمه ای از زبان برنامه نویسی جاوا(java)
آموزش زبان برنامه نویسی جاوا
آموزش گرافیک در زبان برنامه نویسی جاوا
آموزش مدیریت چیدمان گرافیکی در زبان جاوا
آموزش ساخت بازی دوبعدی در زبان جاوا
Collection ها در زبان برنامه نویسی جاوا
آموزش پروژه محور ساخت برنامه مدیریت بانک با JavaFX
نمونه پروژه های رایگان زبان جاوا
آموزش دیتابیس در زبان برنامه نویسی جاوا
نمونه مثال پایه ای زبان برنامه نویسی جاوا
نمونه مثال String در زبان برنامه نویسی جاوا
آموزش جامع برنامه نویسی JavaFX
آموزش ساخت برنامه آزمون تستی در JavaFX
آموزش برنامه نویسی سوکت در جاوا
آموزش ساخت برنامه دفترچه تلفن با JavaFX
آموزش ساخت ربات ساده تلگرام با زبان جاوا
آموزش ساخت برنامه ماشین حساب با JavaFX
آموزش ساخت برنامه ساده مدیریت ایمیل ها با JavaFX
دوره آموزش Spring Boot
سفارش انجام پروژه زبان برنامه نویسی جاوا(JAVA)
سفارش انجام پروژه برنامه نویسی متلب(MATLAB) با قیمت منصفانه و تحویل به موقع
سفارش انجام پروژه زبان برنامه نویسی سی شارپ (#C)
سفارش انجام پروژه زبان برنامه نویسی سی(C)
سفارش انجام پروژه زبان برنامه نویسی پایتون(Python)
سفارش انجام پروژه زبان برنامه نویسی PHP (پی اچ پی)
سفارش انجام پروژه زبان برنامه نویسی اسمبلی(Assembly)
سفارش انجام پروژه زبان برنامه نویسی جاوا اسکریپت (Javascript)
سفارش انجام پروژه هوش مصنوعی
سفارش انجام پروژه طراحی الگوریتم
سفارش انجام پروژه ساختمان داده ها
سفارش انجام پروژه مهندسی نرم افزار
سفارش انجام پروژه شبکه های کامپیوتری
سفارش انجام پروژه پایگاه داده: دیتابیس (database)
 سفارش انجام پروژه سیستم عامل
سفارش انجام پروژه پاورپوینت(PowerPoint)
سفارش انجام پروژه اکسل (Excel)
سفارش انجام تحقیق و تهیه مقاله
سوالات متداول برنامه نویسی
جدیدترین مطالب
گفتگو را شروع کنید
مشاوره ،تدریس خصوصی و سفارش انجام انواع پروژه های برنامه نویسی