محلی برای یادگیری جاوا

۲ مطلب با کلمه‌ی کلیدی «پلی مورفیسم در جاوا» ثبت شده است

Polymorphism یا چند ریختی

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

قبل از ذکر مثال به طور ضمنی توضیحی در مورد Overriding داده خواهد شد. البته به طور حتم برنامه نویسان با Overriding  آشنا هستند.

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

public class Parent {
public void printClassName(){
System.out.println("Parent");
}
}
public class Child extends Parent {
public void printClassName(){
System.out.println("Child");
}
}

public class Main {
public static void main(String[] args) {
Parent p= new Parent();
p.printClassName();

Child c= new Child();
c.printClassName();
}
}

خروجی چاپ شده به شکل زیر خواهد بود:

Parent
Child

پس واضح است که وقتی یک متد override می شود زمانی که بر روی نمونه پدر صدا زده می شود متد پدر و زمانی که روی نمونه فرزند می شود صدا زده می شود متد مربوط به فرزند را اجرا می کند.

حال به مفهوم چند ریختی می پردازیم:

چند ریختی در شی گرایی

تصویر بالا را قبلا در پست مربوط به مفاهیم شی گرایی استفاده  کرده بودم. مثال این پست هم در مورد همین تصویر است.

فرض می کنیم یک interface به نام Animal داریم که parent کلاس های مربوط به تمام حیوانات است. در این کلاس یک متد ()Speak داریم که صدای حیوانات را پرینت می کند:

public interface Animal {
void speak();
}

مطابق شکل سه حیوان مختلف داریم که از Animal ارث می برند و متد speak را override می کنند:

public class Dog implements Animal {

public void speak(){
System.out.println("Woof");
}
}
public class Cat implements Animal {
public void speak() {
System.out.println("Meow");
}
}
public class Duck implements Animal {
public void speak(){
System.out.println("Quack");
}
}

حال اگر به شکل زیر از حیوانات نمونه بسازیم شاهد چند ریختی خواهیم بود:

public class Main {
public static void main(String[] args) {

Animal animal1= new Cat();
Animal animal2= new Dog();
Animal animal3=new Duck();

animal1.speak();
animal2.speak();
animal3.speak();
}
}

خروجی :

Meow
Woof
Quack

همانطور که در شکل و در خروجی می بینیم با ساخت سه حیوان و صدا کردن یک متد روی آن شاهد خروجی های مختلف هستیم. این حالت و قابلیت شی گرایی چند ریختی نامیده می شود. در واقع حیوان یا animal در spaek شکل های مختلف به خود گرفته است.

۱۹ آبان ۹۴ ، ۲۱:۴۳ ۰ نظر موافقین ۱ مخالفین ۰
پریسا

شی گرایی

در دنیای برنامه نویسی شیوه های مختلفی برای نوشتن برنامه وجود دارد. یکی از این شیوه های پرکاربرد برنامه نویسی شی گرا (Object Oriented Programming) است. که ساختار و بلوک اصلی در آن شی (Object) است.
در دنیای واقعی مغز اطلاعاتش را به روش شی گرایی از محیط می گیرد و آن ها را پردازش می کند و همین موضوع بن مایه ی بوجود آمدن زبان های شی گرا شد.

برنامه های نوشته شده با این پارادایم، برنامه های ساختار یافته ای هستند که فواید زیر را دارند:
  • خوانایی بالا
  • تست و اصلاح ساده تر
  • سرعت تولید بیشتر
  • پیچیدگی کمتر
  • اعمال ساده تر تغییر
  • دارا بودن قابلیت استفاده مجدد
هر شی، مطابق دنیای واقعی دارای ویژگی (Property یا Attribute) و رفتار (Behavior) است. برای مثال اگر یک اتومبیل را به عنوان شی در نظر بگیریم شامل یکسری ویژگی مانند رنگ، تعداد در، سال ساخت و ... است همچنین یک اتومبیل یکسری رفتارها از خود نشان می دهد مانند: گاز دادن، ترمز کردن و ...
در برنامه نویسی برای داشتن یک شی نیازمند class هستیم و در کلاس مورد نظر معادل ویژگی variable، و معادل رفتار method را داریم.

مفاهیم مهم در شی گرایی:

وراثت(Inheritance):
همانطور که از نام آن مشخص است، به این معناست که یک شی می تواند ویژگی ها و رفتار شی دیگر را به ارث ببرد.

inheritance

به عنوان مثال در یک ماشین یک سری صفات و رفتار ها مشترک است مانند رنگ و رانندگی. می توانیم این صفات را به عنوان یک کلاس پدر تعریف کرده و انواع اتومبیل های دیگر از ان ارث ببرند.

مخفی سازی (Encapsulation)
به این معناست که یکسری از پیچیدگی ها و جزییات را از دید دیگران پنهان کرد.

مخفی سازی

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

چند ریختی (Polymorphism):
به طور ساده می توان چند ریختی را اینگونه تعبیر کرد: یک شی بتواند شکل های مختلفی به خود بگیرد. به طور دقیقتر اینکه یک متد رفتار های مختلفی از خود نشان دهد.

چند ریختی در شی گرایی

همانطور که در شکل پیداست متد speak می تواند به شکل های مختلف اجرا شود.

۲۳ شهریور ۹۴ ، ۱۷:۴۳ ۰ نظر موافقین ۱ مخالفین ۰
پریسا