برنامه نویسی شی گرا
برنامه نویسی شی گرا (OOP) روشی در برنامه نویسی است که مبتنی بر مفهوم شی و کلاس است.پارادایم برنامه نویسی شی گرا به منظور برطرف کردن محدودیت های برنامه نویسی رویه ای (procedural) توسعه داده شد.
اکثر دانش آموزان یا دانشجویان ماجراجویی برنامه نویسی خود را با زبان برنامه نویسی رویه ای معمولی مانند زبان C آغاز می کنند.
با این حال، برنامه نویسی رویهای محدودیتهای فراوانی داشت. در برنامه نویسی های رویه ای رایج ، توسعه یک نرم افزار پیچیده بزرگ دشوار بود.
ساز و برگ برنامه شی گرا به برنامه نویس اجازه می دهد تا از المنت های کلیدی داده محافظت کند. داده ها را می توان با محدود کردن دسترسی آن به متدهایی که به شیء تعلق دارند محافظت کرد.
روش برنامه نویسی شی گرا کامپوننت های برنامه را به صورت objects نشان می دهد.
هر شی می تواند داده های خاص خود را داشته باشد و متد هایی که می تواند روی داده ها عمل کند.
در این مقاله ، تعریف برنامه نویسی شی گرا ، برخی از مفاهیم اساسی OOP مانند مفهوم کلاس و اشیاء را یاد خواهید گرفت.
ما همچنین به طور مفصل در مورد چهار اصل مهم برنامه OOP که شامل ، کپسوله سازی(encapsulation)، وراثت(inheritance)، انتزاع(abstraction)و چندریختی(polymorphism) است، بحث خواهیم کرد.
نیاز به رویکرد برنامه نویسی شی گرا
در رویکرد برنامه نویسی procedural رایج ، محدودیتهای عمدهای داشت. همچنین ایمن کردن دادههای برنامه از تغییرات ناخواسته ، دشوار بود.
ساختار طبق معمول برنامه procedural ، شامل داده های برنامه به شکل متغیرها و توابعی است که روی داده ها عمل می کند.
داده های برنامه در برنامه نویسی ر procedural عموماً global هستند. داده های global (سراسری) را می توان با هر تابعی اداره کرد. محافظت از داده ها در برابر چنین تغییرات غیرعمدی سخت بود.
چنین تغییری در داده های global می تواند بر عملکرد سایر توابع که از داده های مشابه استفاده می کنند تأثیر منفی بگذارد.
رویکرد برنامه نویسی شی گرا (OOP) راه حل بسیاری را برای رفع محدودیت های برنامه نویسی procedural ارائه کرد.
در رویکرد برنامه نویسی OOP، کنترل دسترسی به داده ها و همچنین مدل سازی موضوعات دنیای واقعی در سبک برنامهنویسی OOP بسیار سادهتر شد.
برنامه نویسی شی گرا چیست؟
برنامه نویسی شی گرا یک رویکرد در توسعه نرم افزار کاربردی است که بر اساس مفهوم بنیادی کلاس و شی است.
در متدولوژی OOP، تمام اجزای برنامه به صورت اشیا در کد برنامه نمایش داده می شوند. اشیاء به عنوان کلاس در کد برنامه تعریف شده اند.
به عنوان مثال، دانشجو(student)، مربی(instructor)، درس(course)، بخش(department)، نمونه های کمی از آبجکت های مورد استفاده نرم افزار برای کالج هستند.
در برنامه OOP، گروهی از متغیرهای مرتبط با object و method های کار بر روی دادهها را به عنوان یک واحد ترکیب میکنیم. یک شی کوچکترین جزء در برنامه OOP است. هر شی دارای برخی property (ویژگی) و Method (رفتار) است.
Object در برنامه نویسی شی گرا
شی(Object) یک موجودیت در دنیای واقعی است که باید در برنامه نرم افزاری نمایش داده شود. دنیای اطراف ما پر از اشیایی است مانند خودکار، چراغ، خانه، ماشین، گربه، سگ، همگی نمونه هایی از آبجکت هستند.
با این حال، از دیدگاه توسعه نرم افزار، یک شی می تواند موجودیت زنده، جسم فیزیکی یا حتی مفهوم تجاری مانند حساب بانکی باشد.
هر شی دارای identity (شناسه) و state (وضعیت) منحصر به فرد است. وضعیت یک شی توسط متغیرهای عضو آن تعریف می شود. رفتار شی توسط متدهای عضو آن تعریف می شود.
آبجکت ها موجودیت های زمان اجرا هستند که در طول اجرای برنامه ایجاد می شوند. برای ایجاد یک آبجکت ، برای تخصیص حافظه، منابع (resource)مورد نیاز است.
برنامه نویس ابتدا باید آبجکت را در قالب یک کلاس تعریف کند. یک کلاس به عنوان یک template برای آبجکت کار می کند.
به عنوان مثال، میتوانیم به تعداد آبجکت دانشآموز از کلاس دانشجویی که در کد برنامه تعریف شدهاند، نمونهسازی کنیم (ایجاد کنیم).
مثالی از object در برنامه نویسی شی گرا
برنامه OOP ممکن است دارای آبجکت باشد. هر شی را می توان به طور منحصر به فرد با شناسه (identity)و وضعیت (state) خود شناسایی کرد.
متدهای اشیاء تمام عملیاتی که آن شی می تواند انجام دهد را توصیف می کنند.
وضعیت شی (Object State)
هر آبجکت دارای State است که با property آن تعریف می شود(داده). property آبجکت با داده ها نمایش داده می شوند (که به عنوان متغیر نیز نامیده می شود).
State یک آبجکت با property های آن توصیف می شود. هر آبجکت مجموعه ای از داده های خاص خود را دارد.
رفتار شی (Object Behavior)
هر آبجکت نیز رفتاری از خود نشان می دهد. رفتار شی به وسیله متد (method) تعریف می شود.
رفتار آبجکت توسط متدها نشان داده می شود. برنامه نویس می تواند تعدادی متد را در کلاس تعریف کند.
شناسه منحصر به فرد آبجکت (Object Unique Identity)
هر آبجکت در برنامه OOP یک شناسه منحصر به فرد دارد. برنامه نویس می تواند property ها و method های آبجکت را مطابق با نیازهای برنامه تغییر دهد.
به عنوان مثال، اجازه دهید مثالی از یک آبجکت اتومبیل را در نظر بگیریم. هر خودرو را می توان به صورت جداگانه با شماره ثبت منحصر به فرد خود، شماره شاسی و مشخصات مالک آن شناسایی کرد.
Propertyها و method های آبجکت
Propertyها و method ها ، کامپوننت های ضروری آبجکت هستند. Propertyهای شی ، با متغیر نشان داده می شود. در حالی که رفتار آبجکت ، با method تعریف می شود.
کلاس در برنامه نویسی شی گرا
یک کلاس به عنوان طرحی اولیه (blueprint) برای ایجاد یک object تعریف می شود. یک کلاس همچنین می تواند به صورت متناوب به عنوان یک template که یک شی را توصیف می کند، نامیده می شود.
کلاس مکانیزمی در برنامه نویسی شی گرا است که متغیرها و متدهای مربوط به یک شی را به هم متصل می کند.
برنامه نویس می تواند قابلیت مشاهده متغیرهای کلاس و متدها را با استفاده از تعیین کننده دسترسی تعریف کند. متغیرها و متدهای public را می توان در هرجای کد برنامه به آن دسترسی داشت.
در روش OOP، کد برنامه به صورت مجموعه ای از کلاس ها سازماندهی می شود. کلاس ، آبجکت را در کد برنامه تعریف می کند.
مفهوم کلاس در برنامه نویسی شی گرا
هر کلاس نشان دهنده یک موجودیت دنیای واقعی است. به عبارت دیگر، یک شی باید در کد برنامه نمایش داده شود.
متودولوژی برنامه نویسی OOP به وضوح مالکیت داده ها را بر حسب کلاس ها تعریف می کند. هر کلاس دادهها و متدهایی را که روی دادهها کار میکنند را به هم متصل میکند.
مثالی از کلاس در OOP
اجازه دهید نمونه ای از تعریف کلاس در جاوا را در نظر بگیریم. کلاس با استفاده از کلمه کلیدی class در جاوا تعریف می شود. در این مثال، کلاسی را با نام MethdDemoتعریف کرده ایم.
اصول برنامه نویسی شی گرا
OOP بر چهار اصل اساسی استوار است.
- کپسوله سازی(Encapsulation)
- وراثت(Inheritance)
- انتزاعی(Abstraction)
- چند ریختی(Ploymorphism)
1.کپسوله سازی(Encapsulation)
کپسوله سازی در برنامه نویسی شی گرا چیست؟
فرآیند اتصال داده ها و متدها به یکدیگر تحت عنوان یک واحد را کپسوله سازی می گویند. کمبود امنیت داده کافی یکی از محدودیت های اصلی برنامه نویسی procedural بود. در برنامه نویسی شی گرا، دسترسی به داده ها محدود به متدهایی است که متعلق به شی است
2-ارث بری (Inheritance).
ارث بری در برنامه نویسی شی گرا چیست؟
ارث بری فرآیند به دست آوردن قابلیت های موجود کلاس والد و افزودن ویژگی ها و عملکردهای اضافی به کلاس فرزند ارثی است.
ارث بری در برنامه نویسی شی گرا ، فرآیند استخراج یک کلاس از کلاس دیگر است که به عنوان Inheritance شناخته می شود. کلاس inherited (به ارث برده) به طور موثر همانند کلاس والد(parent) عمل می کند که به آن ، کلاس فرزند(child) می گویند.
ارث بری یکی از مهمترین اصول اساسی در پارادایم برنامه نویسی شی گرا است. ارث بری اساساً با قابلیت استفاده مجدد از کد برنامه سروکار دارد.به عنوان مثال، وراثت تک سطحی و چند سطحی در جاوا مجاز است.
سوپر کلاس چیست؟
کلاس پایه (Base Class) یا کلاس والد (Parent Class).
زمانی به کلاس، یک super class گفته می شود که توسط یک یا چند کلاس به ارث برده شود. super class به طور متناوب به عنوان کلاس پایه یا کلاس والد نیز نامیده می شود.
Sub Class (کلاس فرعی) چیست؟
کلاس فرزند (Child Class) یا کلاس استخراج شده (Derived Class).
زمانی به یک کلاس ، Sub Class گفته می شود که از کلاس دیگری مشتق شده باشد. کلاس فرعی نیز به طور متناوب به عنوان کلاس فرزند یا کلاس مشتق شده نامیده می شود.
کلاس مشتق شده پس از ایجاد، کپی خود را از متغیرها و متدهای تعریف شده در کلاس والد خواهد داشت.
با این حال، کلاس فرعی (Sub Class) می تواند متغیرها و متدهای بیشتری را علاوه بر متغیرها و متدهای به ارث برده از کلاس والد ، اضافه و تعریف کند.
انواع ارث بری در شی گرا
قابلیت استفاده مجدد کد یکی از ویژگی های مهم برنامه نویسی شی گرا است.
قابلیت استفاده مجدد کد به برنامه نویس اجازه می دهد تا از کلاس های از قبل ایجاد شده ، در کد برنامه استفاده کند.
با استفاده از ارث بری ، برنامه نویس از کدهای موجود که قبلاً برای پروژه های دیگر نوشته و آزمایش شده است استفاده می کند. ارث بری به کاهش زمان کلی توسعه برای توسعه نرم افزار کمک می کند.
چه چیزی مجاز نیست؟
به عنوان مثال، ارث بری ترکیبی(hybrid inheritance) و ارث بری چندگانه (multiple inheritance)در جاوا مجاز نیست.
3-انتزاع (Abstraction).
انتزاع در OOP چیست؟
اصطلاح انتزاع(Abstraction) یکی دیگر از اصول اساسی مهم در OOP است. اصطلاح Abstraction در OOP به سادگی به معنای ارائه نمای ساده و پنهان کردن پیچیدگی است.
کلمه abstract از یک کلمه لاتین به معنای “کشیده شدن، جدا شدن” گرفته شده است. ایده اصلی در Abstraction چیزی است که از object فیزیکی واقعی جدا شده است.
Abstraction اغلب برای انتقال ایده ها استفاده می شود. که کاربرد روشنی برای یک شی خاص زندگی واقعی ندارد. این بدان معناست که به صورت تصویری یک شیء خاص زندگی واقعی را نشان نمی دهد.مفهوم Abstraction در برنامه OOP برای ارائه نمای ساده تر از یک شی با حذف جزئیات نامربوط استفاده می شود.
مفهوم Abstraction کاربردهای زیادی دارد. در مهندسی نرم افزار، برای تسهیل درک سیستم های نرم افزاری پیچیده استفاده می شود.
Abstraction به ویژه در حل مسائل پیچیده ضروری است، زیرا حلکننده را قادر میسازد تا بر حسب ایدههای مفهومی فکر کند و نه بر اساس هر موضوع خاص.
مثالی از انتزاع در OOP
کلاسی که با استفاده از کلمه کلیدی abstract تعریف می شود به عنوان کلاس انتزاعی شناخته می شود. کلاس abstract ممکن است شامل متدهای انتزاعی باشد یا نباشد.
که به عبارت دیگر به این معنی است که در کلاس انتزاعی می توانیم متدهای concrete را نیز تعریف کنیم. یک متد زمانی concrete است که بدنه متد و پیاده سازی (implementation) آن را داشته باشد.
یک کلاس انتزاعی همچنین می تواند حاوی متدهای انتزاعی باشد. به متد زمانی یک متد انتزاعی گفته می شود که بدنه متد و پیاده سازی (implementation) آن را نداشته باشد.
یک کلاس انتزاعی را نمی توان نمونه سازی کرد. یعنی ما نمیتوانیم یک شی از کلاس انتزاعی ایجاد کنیم.
کلاس abstract می تواند توسط کلاس فرزند به ارث برده شود و جزئیات پیاده سازی را برای متدهای انتزاعی ارائه دهد.
4-چند ریختی (Polymorphism).
چند ریختی در OOP چیست؟
پلی مورفیسم یکی از چهار مفهوم اصلی طراحی OOP است که به طور گسترده در برنامه نویسی شی گرا استفاده می شود.
کلمه پلی مورفیسم از دو کلمه یونانی poly و morph تشکیل شده است. کلمه poly به معنی چند و کلمه morph به معنای اشکال است. اصطلاح چندریختی به سادگی به معنای اشکال بسیاری است.
- پلی مورفیسم را می توان به عنوان یک شی منفرد با چندین رفتار متفاوت نیز تعریف کرد.
- رفتار چند ریختی object به شرایط بستگی دارد.
- رایج ترین استفاده از پلی مورفیسم در OOP، استفاده از یک مرجع کلاس والد برای ارجاع به یک شی کلاس فرزند می باشد.
- رایج ترین و ساده ترین کاربرد پلی مورفیسم در برنامه OOP استفاده از نام متد مشابه است.
به عنوان مثال، می توان بسیاری از متدها را با نام متد یکسان اما با پیاده سازی متفاوت تعریف کرد.
بسته به روشی که متد فراخوانی می شود، روش صحیح فراخوانی می شود.
تصمیم برای فراخوانی متد مناسب می تواند در زمان کامپایل یا در زمان اجرا اتفاق بیفتد.
class Shape{
void draw(){System.out.println("drawing...");}
}
class Rectangle extends Shape{
void draw(){System.out.println("drawing rectangle...");}
}
class Circle extends Shape{
void draw(){System.out.println("drawing circle...");}
}
class Triangle extends Shape{
void draw(){System.out.println("drawing triangle...");}
}
class TestPolymorphism2{
public static void main(String args[]){
Shape s;
s=new Rectangle();
s.draw();
s=new Circle();
s.draw();
s=new Triangle();
s.draw();
}
}
مزایای برنامه نویسی شی گرا
برنامه نویسی شی گرا در مقایسه با برنامه نویسی رویه ای (procedural) مزایای زیادی دارد.
- OOP می تواند از پروژه نرم افزاری بزرگ پشتیبانی کند.
- OOP حفاظت بهتری از داده ها ارائه می دهد.
- قابلیت استفاده مجدد کد.
- بازنمایی بهتر از اشیاء دنیای واقعی.
- تعمیر و نگهداری بهتر نرم افزار.
- امنیت پیشرفته.
- اصلاح کد آسان
OOP می تواند از پروژه نرم افزاری بزرگ پشتیبانی کند.
زبانهای برنامهنویسی procedural در طراحی یک نرمافزار در مقیاس بزرگ محدودیتهای عمدهای داشتند.
برنامه نویسی شی گرا می تواند به راحتی پروژه توسعه نرم افزار در مقیاس بزرگ و پیچیده را مدیریت کند.
OOP محافظت بهتری از داده ها ارائه می دهد.
الگوی برنامه نویسی OOP فیچرهای بسیاری را ارائه می دهد که حفاظت عالی از داده ها را فراهم می کند. در OOP، مجوزهای دسترسی به داده ها به شدت کنترل می شود.
برنامه نویسی OOP به برنامه نویس اجازه می دهد تا مجوزهای دسترسی به داده ها را تعریف و تنظیم کند.
قابلیت استفاده مجدد کد
یکی از ویژگی های مهم همه زبان های برنامه نویسی شی گرا است.
برنامهنویس میتواند کتابخانهای از کلاسهای استاندارد ایجاد کند تا عملکردهای رایج را مدیریت کند.
در غیر این صورت، استفاده از متدهای استاندارد کتابخانه کلاس نیز با گنجاندن این کتابخانه کلاس در کد برنامه امکان پذیر است.
نمایش بهتر اشیاء دنیای واقعی برنامه نویسی OOP بر اساس مفهوم اساسی شی و کلاس است. شی نشان دهنده یک موجودیت دنیای واقعی است.
برنامه نویسی OOP به برنامه نویس اجازه می دهد تا فیچرهای یک شی را در کلاس توصیف کند. برنامه نویس به راحتی می تواند اشیاء دنیای واقعی را به صورت واقعی در کد برنامه نمایش دهد.
تعمیر و نگهداری بهتر نرم افزار
تعمیر و نگهداری نرم افزار یک چالش بزرگ برای اکثر شرکت های نرم افزاری است. با این حال، مدیریت برنامه OOP در درازمدت نسبتاً ساده تر است.
مسائل مربوط به نگهداری کد معمولی را می توان به راحتی در OOP حل کرد. طراحی ماژولار اولیه به برنامه نویس اجازه می دهد تا تغییرات لازم را در کد برنامه اعمال کند.
امنیت پیشرفته
زبان های OOP ویژگی های امنیتی قوی را ارائه می دهند. زبان های برنامه نویسی OOP ویژگی های امنیتی بسیار خوبی را ارائه می دهند که به برنامه نویس اجازه می دهد تا ویژگی های امنیتی لازم را در خود جای دهد.
زبان های برنامه نویسی مبتنی بر OOP مانند جاوا. به عنوان مثال زبان جاوا از اشاره گرهایی که دسترسی مستقیم به حافظه را می دهد پشتیبانی نمی کند.
اصلاح کد آسان
برنامه های نرم افزاری به گونه ای طراحی شده اند که برای مدت طولانی به کاربر نهایی خدمات رسانی کنند. در اکثر مواقع همه نرم افزارها باید با اعمال تغییرات در نرم افزار اصلاح شوند. چنین تغییراتی می تواند یک اشکال نرم افزاری ایجاد کند.
با این حال، نرم افزار مبتنی بر زبان OOP را می توان به راحتی به دلیل ساختار ماژولار آن بدون تأثیر نامطلوب بر عملکرد سایر ماژول ها تغییر داد.
دیدگاهتان را بنویسید