گروه نرم افزاری هیلتن

مفاهیم پایه شيء گرایی Object Oriented Programming (OOP)

مفاهیم پایه شيء گرایی



مروری بر شيء ‌گرایی:

روش‌های زیادی وجود دارد که می‌توان برای حل مسئله در نظر گرفت. یکی از روش‌هایی که به صورت گسترده در نرم افزار استفاده می‌‌شود، دیدگاه شیء‌گرایی است. پایه و اساس چارچوب کاری .NET و زبان C# را شیء‌گرایی تشکیل می‌دهد. برنامه نویسی شیء‌گرا (Object Oriented Programming (OOP)) سبکی از برنامه‌نویسی است که در آن برنامه براساس نمونه‌هایی از مفاهیم و موجودیت‌ها ساخته می‌شود. برنامه نویسی شیء‌گرا نیاز دارد تا شما روش فکر کردن در مورد نحوه‌ی ساختن برنامه‌هایتان را تغییر دهید. اشیا شما را قادر می‌سازند تا کارها، روندها و ایده‌های دنیای واقعی را که برنامه‌ی خود را به خاطر آن‌ها نوشته‌اید، خیلی خوب توسط کدها مدل‌سازی کنید. به جای اینکه برنامه‌تان را به صورت یک رشته کنترلی ببینید که داده‌ها را از یک تابع به دیگری منتقل می‌کند، برنامه‌نویسی شيء ‌گرا به شما کمک می‌کند تا برنامه‌تان را به عنوان مجموعه‌ای از اشیای هماهنگ مدلسازی کنید که هرکدام از آن‌ها به صورت مجزا از دیگران کارهای خاصی را انجام می‌دهد

یک شيء (Object) چیست ؟

ما در یک دنیای شيء ‌گرا زندگی می‌کنیم؛ هر فرد با اشیا دیگر که ممکن است انسان، حیوان، و یا هرچیز دیگری باشد، ارتباط برقرار می‌کند. يك شيء مي‌تواند يك موجوديت فيزيكي مانند يك كتاب یا يك صندلي باشد که شما مي‌توانيد يك كتاب را توصيف كنيد، بخوانيد و یا آن را بخريد و یا می‌تواند يك موجوديت غير فيزيكي و غير قابل لمس باشد، مانند يك كار يا زمان؛ با اينكه يك كار چيزي است كه به‌صورت فيزيكي نمي‌توان آن را لمس كرد اما مي‌توانيد آن‌ را توصيف كنيد، روي آن بحث كنيد و آن را انجام بدهيد و تكميل كنید. هر چيزي كه بتوانيد آن را توصيف كنيد مي‌تواند به عنوان يك شيء در نظر گرفته شود.

هر شيء در دنيا واقعي بوسيله دو گروه خصوصيات مشخص مي‌شود :

1- صفات (Attributes) : صفات ويژگي‌هاي يك شيء را بيان مي‌كند. در واقع يك صفت يك ويژگي از يك شيء است. به عنوان مثال هر انسان دارای خصوصیاتی مانند قد، وزن،رنگ مو و غیره می‌باشد. صفات توصيف كننده يك شيء هستند و با استفاده از مقادير صفات مي‌توان وضعيت فعلي يك شيء را بدست آورد. براي مثال يك فرد مي‌تواند داراي صفت تاهل باشد كه با استفاده از مقدار اين صفت مي‌توان وضعيت تاهل آن فرد را در شرايط فعلي بدست آورد.

2- رفتار (Behaviors): يك رفتار عملي است كه يك شيء توانايي انجام دادن آن را دارد. براي مثال يك شخص ميتواند راه برود، بدود، بنشيند و هزاران كار ديگري كه قادر به انجام دادن آن است كه هر كدام از اين كارها براي آن شخص يك رفتار محسوب مي‌شود. حال در نظر بگیرید يك كتاب به عنوان یک شيء قادر به انجام دادن چه كاري است تا به عنوان يك رفتار براي آن شيء به حساب آيد؟ شيء كتاب در حقيقت قادر به انجام هيچ كاري نيست. يك ناشر براي انتشار يك كتاب كارهایي مانند ويرايش كتاب، چاپ كتاب، توزيع كتاب و در آخر فروش كتاب را انجام مي‌دهد. اين كارها توسط يك نفر بر روي كتاب انجام مي‌گيرد. متدلوژي شيء ‌گرا به ما ميگويد كه اين رفتارها را به جاي فردي كه اين كارها را انجام مي‌دهد به شيء كتاب تخصيص دهيم.

البته علاوه بر موارد بالا میتوان رخداد های (Events) که برای یک شيء می تواند اتفاق بیفتد را جزوء مشخصات شیء در نظر گرفت در منابع این مورد جزوء مشخصات شیء در نظر گرفته نشده است

کلاس (Class):

همه‌ی اشیا از مفهومی به نام کلاس ساخته می‌شوند که هر کلاس مشخص می‌کند که اشیایی که از آن کلاس ساخته می‌شوند باید چه خصوصیات و رفتارهایی داشته باشند. به طور مثال زمانی که یک شيء از کلاس انسان می‌سازید باید خصوصیات و رفتارهای انسان را دارا باشد. اما خود کلاس یک مفهوم انتزاعی (Abstract) است. یعنی همانطور که انسان یک مفهوم است و وجود خارجی ندارد، خود کلاس نیز وجود ندارد و برای درک آن باید شيء ‌ای که از آن ساخته شده را دید.

انتزاع(Abstraction):

مفهومی که در شيء ‌گرایی به وفور از آن استفاده می‌شود مفهوم انتزاع است. به عنوان مثال یک تلویزیون را در نظر بگیرید. این دستگاه دارای یک کنترل از راه دور است که با استفاده از آن می‌توان اعمالی را بر روی تلویزیون مثل روشن و خاموش کردن انجام داد ولی لازم نیست که کاربران درباره‌ی چگونگی ارتباط کنترل از راه دور با دستگاه و نحوه پردازش امواج توسط کنترل اطلاعی داشته باشند و فقط باید روش کار کردن با آن را بلد باشد. در برنامه‌نویسی نیز کلاس‌ها و اشیا بسیاری هستند که ما باید فقط روش کارکردن با آن‌ها را بلد باشیم و نیازی نیست که بدانیم چگونه طراحی شده و از چه الگوریتم‌هایی بهره گرفته‌اند و فقط می‌توانیم از خصوصیات و ویژگی‌های مرتبط آنها اطلاع داشته باشیم.

کپسوله سازی (Encapsulation):

کپسوله‌سازی یا نهان‌سازي يك از مفاهيم شيء ‌گرايي است كه به‌صورت مكرر در زندگي روزانه از آن استفاده می‌کنیم. نهان سازي به معني قرار دادن چيزهاي مرتبط به هم در داخل يك شیء جديد است. براي مثال يك حساب بانكي شامل شماره حساب، نام مشتري، آدرس مشتري، نوع حساب و موجودي مشتري مي‌باشد. همچنين براي يك حساب بانكي رفتارهایي مانند باز كردن حساب، بستن حساب، برداشت از حساب و واريز به حساب وجود دارد. اين اطلاعات را با هم در داخل يك شیء حساب پنهان مي‌كنيم .

ایده اصلي كه نهان‌سازي ارائه مي‌دهد اين است كه رفتار يك شیء بايد تا حد ممكن دور از ديد كاربر باشد. به عبارت ديگر تا زماني كه لازم نباشد، كاربر نبايد متوجه شود كه يك شیء چگونه درخواست‌هاي او را انجام مي‌دهد.

وراثت (inheritance):

از مفاهیم دیگر در برنامه‌نویسی شیء‌گرا وراثت هست. وراثت در سيستم‌هاي شیء‌گرا همانند به ارث بردن مشخصات رفتاري و بدني از والدين است. مشخصات رفتاري و بدني، همان صفات و رفتارهاي يك كلاس هستند كه يك كلاس از كلاس ديگر مي‌تواند به ارث ببرد. وراثت زيستي يك مدل سلسله مراتبي به‌وجود مي‌آورد كه شما را قادر مي‌سازد با دنبال كردن اين سلسله مراتب و بالا رفتن در آن اجداد خودتان را بشناسید. در سيستم‌های شیء‌گرا نيز دقيقا به این صورت است كه شما مي‌توانيد با دنبال كردن اين رابطه، كلاس مولد كلاس جاري را به‌دست آوريد.

به‌عنوان‌مثال سيب قرمز يك سيب است. پس كلاس مولد سيب قرمز، كلاس سيب است. سيب نوعي ميوه است. پس كلاس مولد سيب، كلاس ميوه است. سيب يك زير كلاس (Sub Class) و ميوه يك سوپر كلاس(Super Class)هست.

سوپر كلاس : يك سوپر كلاس، كلاسي است كه داراي ويژگي‌هایي است كه بين دو يا چند كلاس مشترك است و آن‌ها را با آن كلاس‌ها به اشتراك گذاشته است. سيب يك سوپر كلاس براي سيب قرمز است. همه‌‌‌ی صفات و رفتارهاي مشترك بين سيب قرمز و سيب، در كلاس سيب تعريف شده است و سيب قرمز از آن صفات و رفتارها استفاده مي‌كند.

زير كلاس : يك زير كلاس، كلاسي است كه داراي ويژگي‌هایي است كه منحصر به آن كلاس مي‌باشد همراه با ويژگي‌هایي كه در يك سوپر كلاس تعريف شده است و آن‌ها را از آن سوپر كلاس به ارث مي‌برد. يك كلاس مي‌تواند هم سوپر كلاس و هم يك زير كلاس باشد. كلاس سيب يك سوپر كلاس براي كلاس سيب قرمز است و يك زير كلاس براي كلاس ميوه است.

رابط‌کاربری Interface:

مفهوم دیگر در شیء‌گرا رابط‌کاربری هست. در زبان هایی مانند C#, Java رابط‌ها بیان کننده‌ی قوانینی هستنند که اگر کلاسی بخواهد از رابط‌کاربر مورد نظر استفاده کند مجبور است که همه‌ی قوانین را اجرا کند. این قوانین شامل خصوصیات کلاس و نوع آن و همچنین شامل متدها و نوع برگشتی و تعداد آرگومان‌های آن است. نکته‌ای که وجود دارد این است که رابط‌کاربر هیچ کدام از این متدها را پیاده‌سازی نمی‌کند و خصوصیات را مقداردهی نمی‌کند و فقط مشخص می‌کند که کلاس‌های مشتق شده این ویژگی‌ها را باید داشته باشند.

چندریختی (Polymorphism) :

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

روابط بين اشياء و كلاس‌ها

اشيا براي اين كه كاري انجام دهند نياز دارند با هم كار كنند. پس آن‌ها نياز به روشیء دارند كه با هم ارتباط برقرار كنند. وقتي كه يك مشتري بليط سفارش مي‌دهد، مشتري بايد يك سفارش ايجاد كند و بليط مورد نظرش را به آن سفارش اضافه كند. اشيا نرم‌افزاري كه نماينده مشتري، سفارش، بليط هستند نياز دارند تا رابطه بين اشيا دنيای واقعي را عينا تكرار كنند. رابطه بين كلاس‌ها (اشيا) به سه شكل متفاوت تقسيم مي‌شود :

1. ارتباط (Association)
2. رابطه تجمع (Composition)
3. رابطه تركيب(Composition)

ارتباط (Association)

ساده‌ترين شكل رابطه، ارتباط مي‌باشد. که يك رابطه نظير به نظير بين دو شیء مي‌باشد. يك شیء به‌طور ساده درباره شیء ديگر مي‌داند. يك ارتباط به يك كلاس امكان مي‌دهد تا درباره صفات و رفتارهاي كلاس ديگر بداند.

يك سيستم شیء‌گرا از انواع كلاس‌ها تشكيل شده است كه از طريق ارسال پيام‌ها و دريافت پاسخ‌ها با يكديگر همكاري دارند. هنگام اجرا، يك سيستم شیء‌گرا، مملو از نمونه‌هایي مي‌شوند كه مطابق نوع كلاس خود مي‌باشند. جايي كه نمونه‌هاي كلاس پيام‌هايی را به نمونه‌هاي كلاس ديگر ارسال مي‌كند يك ارتباط بين آن‌ها به‌وجود آمده است.

براي مثال كلاس تحويل‌دار درباره صفات و رفتارهاي كلاس حساب بانكي مي‌داند و كلاس حساب درباره صفات و عمليات تحويل‌دار مي‌داند. بنابراين اين دو كلاس مي‌توانند پيغام‌هايي را به يكديگر ارسال كنند.

رابطه تجمع (Composition)

رابطه تجمع، يك رابطه بين يك واحد كل و جزء است. در رابطه تجمع يك كلاس مي‌تواند شامل نمونه‌هایي از كلاس‌هاي ديگر نيز باشد. براي مثال يك كلاس ماشين را در نظر بگيريد، كه خود از چندين كلاس ديگر مانند يك كلاس موتور، چندين كلاس لاستيك و تعدادي كلاس ديگر براي ساير بخش‌ها تشكيل شده است.

در رابطه تجمع، شیء جزء به شیء كل وابسته نيست. شیء كل و جزء در زمان‌هاي مختلف ايجاد و از بين مي‌روند. يعني ممكن است شیء جزء را ايجاد كنيد، بدون اين كه شیء كل را ايجاد نمایید. براي مثال شیء موتور و لاستيك را ايجاد مي‌كنيد بدون اينكه شیء ماشين را ايجاد كنيد. يا برعكس ممكن است شیء ماشين را با اشيا كه قبلا وجود داشته‌اند ايجاد كنيد بدون اين كه نياز باشد همزمان با ايجاد ماشين، آن‌ها را ايجاد كنيد.

براي مثال يك كلاس براي تيم پروژه و يك كلاس براي كارمندان شركت در نظر بگيريد. تيم پروژه، از كارمندان شركت تشكيل شده است. اما ممكن است يك تيم پروژه منحل شود درحالي‌كه كارمندان به كار خود در شركت ادامه مي‌دهند.

رابطه تركيب(Composition)

رابطه تركيب، شبيه رابطه تجمع مي‌باشد اما با يك تفاوت: در رابطه تركيب، چرخه حيات جزء نمي‌تواند بيش از چرخه حيات كل باشد. به عبارت ديگر شیء جزء هيچ‌وقت نمي‌تواند بدون شیء كل وجود داشته باشد، شیء جزء همزمان با شیء كل به‌وجود مي‌آيد و همزمان با شیء كل از بين مي‌رود.

براي مثال يك پنجره در سيستم عامل ويندوز را در نظر بگيريد. يك پنجره از چندين شیء تشكيل شده است به‌عنوان‌مثال دكمه Minimize، Maximize،Close ، يك منو و .... زماني كه يك شیء پنجره ايجاد مي‌شود همزمان با آن تمام دكمه‌ها و منو ايجاد مي‌شود. با بستن پنجره تمام اشيا، پنجره، دكمه‌ها و منو از بين مي‌روند. امكان ندارد بدون وجود يك شیء پنجره يك شیء منو ايجاد شود و به كاربر نمايش داده شود يا با بستن و از بين رفتن شیء پنجره، شیء منو از بين نرود.

رابطه تركيب، مستلزم چرخه‌هاي حيات همزمان است، به‌طوري‌كه وقتي شیء، كل حذف مي‌شود، اشيا جزء نيز حذف مي‌شود.

رابطه تعميم : (Generalization)

در یک سوپر مارکت، مواد غذايي بر حسب ويژگی‌هاي آن‌ها در قسمت هاي مختلف قرار گرفته است. ميوه ها و سبزيجات در يك قسمت، گوشت در قسمتي ديگر و خشكبار در قسمتي ديگر از فروشگاه قرار دارد. همه اين‌ها مواد غذايي هستند، اما انواع مختلفي از مواد غذايي می‌باشند. عبارت هاي "تا حدي" ("of Kind")، "نوعي از" ("of Type") يك رابطه تعميم را بين دو كلاس نشان مي‌دهد. (براي مثال سيب نوعي از ميوه است و ميوه نيز نوعي از غذا است.) در بعضي مواقع عبارت "هست يک" بيانگر رابطه تعميم است. (براي مثال سيب قرمز يك سيب هست.)

اين نوع رابطه اغلب، وراثت (inheritance) ناميده مي شود. در همان مثال سيب نوعي ميوه است پس سيب تمام ويژگيهاي يك ميوه را به ارث مي برد و همچنين سيب بعضي از ويژگيها را دارد كه فقط متعلق به سيب مي باشد و سيب را از ديگر ميوه ها متمايز مي كند. پس مي‌توان گفت كه ميوه يك تعميم (generalization) از هندوانه، سيب، هلو و همه ديگر اشياء است كه در اين گروه قرار دارند.







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن