زندگی واقعی در برنامه نویسی شی گرا

پنجشنبه 30 مهر 1394

در این مقاله می خواهیم مثالی از زندگی واقعی را دربرنامه نویسی شی گرا Object Oriented Programing یا (oop) توضیح دهیم. در بسیاری از موارد درباره مثالی از شی گرایی در زندگی واقعی سوال پرسیده می شود.

زندگی واقعی در برنامه نویسی شی گرا

موارد نام برده شده در زیر از اصول شی گرایی می باشند.

1- کلاس class

2- شی object

3- سازنده constructor (در واقع جز اصول نمی باشد)

4- انتزاع Abstractio

5- کپسوله سازی Encapsulation

6- چندریختی polymorphism

7-ارث بری Inheritance

8-مخرب Destrucror (در واقع جز اصول نمی باشد)

شرح

زبان C یک زبان همه منظوره است، ساختار بلاکی، حساس به حروف و یک زبان روش گرا می باشد. اجرا برنامه همیشه از بالا به پایین است. 

ببینیم که یک برنامه C چگونه کامپایل و اجرا می شود.

CLR مانند شکل زیر می باشد:

مثال

این مثال به دو بخش تقسیم می شود. اول، رویه گرا و دوم، شی گرایی

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

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

این کار نیاز به سرمایه گذاری زیادی نبود. بنابراین خانواده ساحت مجسمه گامش را شرح دادن. 

آن ها رویه گرایی را مانند برنامه C دنبال کردند.

آنها خاک رس، پودر گل خشک، آب،منگوله، رنگ، قلمو و غیره را فراهم کردند.

ابتدا مواد را در ظرف ریخته و با آب مخلوط کردند. بخاطر دشته باشید که مخلوط خاک رس می تواند انگشت دست شما را ضخیم کند و در هنگام بلند کردن گل چسبیده درد داشته باشد.

بعد از این مواد آماده است و باید شکل مجسمه را به آن داد.

شروع به ایجاد ساختار پایه مجسمه گانش 

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

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

در این روش فرض کنید برای هر مجسمه 5روز زمان نیاز است. تقریبا هر ماه 6 مجسمه و سالی 72 مجسمه.

برای سال اول آنها 72 مجسمه فروختند. 72 مجسمه به 72 خانه رسید. همسایگان و اقوام مجسمه را بسیار دوست داشتند. بنابراین این خانواده برای سال بعد 2000 مجسمه پیش سفارش گفتند که در اشکال مختلفی بود.

خانواده دوباره نزد خویشاوندان برای حل این مساله رفتند. چگونه می توانیم در یک سال 2000 مجسمه درست کنیم؟ بنابراین به آنها پیشنهاد شد یک مدل ایجاد کنند.( به این معنی که از یک ظرف توخالی برای شکل دادن به مواد داغ تا شکل بگیرند.) تا شکل مناسبی به مجسمه بدهند.

اکنون آنها از قالب های متفاوتی در اندازه های مختلف استفاده می کنند. با این کار توانستند روزی 100 مجسمه درست کنند.

در اینجا آن ها از رویه پیروی کردند که مانند برنامه نویسی شی گرا می باشد.

  -ابتدا ریختن مواد در ظرف و مخلوط آن ها با آب، سپس گرفتن گره، مخلوط با هم و اضافه کردن گره به منگوله به قالب مدل

این مدل مانند کلاس از پیش تعریف شده است.

-کلاس یک چاپ از چیزهای ساخته شده جدید می باشد.

-کلاس شامل مشخصات (اعضای کلاس) و رفتار(توابع اعمالی بر روی آن کاراکترها) می باشد.

-برای ایجاد به این صورت است که اگر ما یک زمین خریداری و بخواهیم یک خانه زیبا در آن بسازیم ابتدا باید یک طرح بکشیم

-در زبان برنامه نویسی قبل از ایجاد هربرنامه ای ابتدا باید تصمیم بگیریم که چه کلاس هایی را ایجاد کنیم.

class Ganesh_Statue {  
    // class members declerations  
    public string shaadu;  
    public string knot;  
    public string water, pot;  
    public string One_Tusk, Big_Head;  
    public string chain, ring;  
    public string mouse_color, Eye_Color, Skin_Color;  
    public void Do_Painting() {}  
} 

شی

-شی نمونه ای از کلاس است

- هر زمان که آنها اولین مجسمه از قالب یا مدل را ایجاد کردند، اولین شی را ایجاد کردند و آن مانند زیر به نظر می رسد.

-هر زمان که آنها چندین مجسمه(چندین شی) با استفاده از مدل ساختند و بخش های دیگری مانند دست، پا و غیره را اضافه کردند، مانند زیر خواهد بود:

انتزاع یا مفهوم

-انتزاع به معنی پنهان کردن جزئیات مدل سازی می باشد.

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

-این خانواده از گره، آب، خاک و غیره برای ساخت مجسمه استفاد کرد و این اطلاعات از کاربران مخفی است. (کسانی که مجسمه را خریداری کرده اند.)

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

سازنده

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

-آنها هم نام با کلاس می باشند.

-در مثال ما سازنده پیشفرض با مقادیری مانند رنگ چشم، رنگ پوست تنظیم می شود.

بعد از فراخوانی سازنده پیشفرض مجسمه گانش مانند زیر خواهد بود:

//constructor  
public Ganesh_Statue() {  
    Console.WriteLine("**** Dafult Constructor in base class starts from here ****");  
    Eye_Color = "Black";  
    Skin_Color = "Redish_White";  
    mouse_color = "Black";  
    Console.WriteLine("Default values of Eye color: " + Eye_Color);  
    Console.WriteLine("Default values of skin color: " + Skin_Color);  
    Console.WriteLine("Default values of mouse colo: " + mouse_color);  
    Console.WriteLine("____________________________________________________________________________");  
    Console.WriteLine();  
}

A. پارامتر سازنده

1- سازنده با حداقل یک پارامتر parameterized constructor نامیده می شود.

2- در مثال فرضی ما یک تاجر ثروتمند به این خانواده آمد و پارامترهایی مانند اینکه می خواست جواهراتی مانند حلقه و زنجیر به مجسمه خود اضافه شود، داد.

// parameterized constructor  
public Ganesh_Statue(string x, string y) {  
    chain = x;  
    ring = y;  
    Console.WriteLine("____________________________________________________________________________");  
    Console.WriteLine("**** Parameterized Constructor of base class starts from here ****");  
    Console.WriteLine("chain color: " + x + " ring color: " + y);  
    Console.WriteLine("____________________________________________________________________________");  
    Console.WriteLine();  
}

کپسوله سازی

-کپسوه سازی به معنی پرکردن داده و تابع باهم می باشد.

-برای مثال ما یک پزشک را دیده و دارو(کپسول) می گیریم. سپس پوشش پلاستیکی برای محافظت کردن از پودر درونی استفاده می شود که به ما کمک می کند تا آن را باز کنیم.

چندریختی

سپس این خانواده درمورد بعضی افراد که دانش خاصی مانند نقاشی دارند تصمیم گیری می کنند.

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

-چندریختی به معنی اختصاص دادن یک نام اما با رفتارهای چندگانه می باشد. یعنی نام تابع همان است اما تعریف آن متفاوت است.

-چندریختی به معنای یک نام و چند مفهوم است و هرجا که برای دسترسی به آن نام خاص تلاش کنیم باید یک اتصال بین آن فراخوانی و تابع وجود داشته باشد. بنابراین دو روش برای اتصال فراخوانی آن تابع می باشد.

1- اتصال زمان کامپایل

2-اتصال زمان اجرا

1-چندریختی زمان کامپایل

در این مورد از چندریختی فراخوانی تابع و تعریف ان در زمان کامپایل انجام می شود.

در اینجا دو روش برای انجام این چندریختی وجود دارد.

A. تابع اضافه بار Function Overlolading

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

// function overloading without parameter  
public void Do_Painting() {  
    Console.WriteLine("**** You are in Function Overloading Without Parameter ****");  
    Console.WriteLine("____________________________________________________________________________");  
    Console.WriteLine();  
}  
  
Passing different parameters like we would like to do some painting of statue of shivaji, different solders of forts in Diwali & Durga statue etc.  
  
// function overloading with parameter  
public void Do_Painting(string Statue_Name) {  
    Console.WriteLine("**** You are in Function Overloading With Parameter ****");  
    Console.WriteLine("Statue Name is: " + Statue_Name);  
    Console.WriteLine("____________________________________________________________________________");  
    Console.WriteLine();  
} 

B. سربارگذاری عملگرها (Operator Overloading)

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

در این مورد قلم مو مانند یک اپراتور می باشد.

public static void operator brush(string paint)  
{  
   // give color to statue using brush  
}  
public static void operator brush(string paint)  
{  
   // remove shadu from small surface area like between finger, below of eye, between legs, corner of legs / hands  
}

اکنون خروجی برنامه ما مانند زیر می باشد.

ارث بری

اکنون فرض کنید کنید مرد ثروتمندی به خانه این خانواده برود. او عکس هایی را به این خانواده نشان داده و مجسمه گاناش مانند تصویر زیر را نیاز دارد:

بطوریکه در تصویر بالا نشان داده شده است، این خانواده تصمیم به اضافه کردن قالب با صندلی روی روکش طلا آراسته به زیورآلات کردند.

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

برنامه

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace Real_Life_Example_OOPS {  
    class Ganesh_Statue {  
        // class members declerations  
        public string shaadu;  
        public string knot;  
        public string water, pot;  
        public string One_Tusk, Big_Head;  
        public string chain, ring;  
        public string mouse_color, Eye_Color, Skin_Color;  
  
  
        //constructor  
        public Ganesh_Statue() {  
            Console.WriteLine();  
            Console.WriteLine("**** Dafult Constructor in base class starts from here ****");  
            Eye_Color = "Black";  
            Skin_Color = "Redish_White";  
            mouse_color = "Black";  
            Console.WriteLine("Default values of Eye color: " + Eye_Color);  
            Console.WriteLine("Default values of skin color: " + Skin_Color);  
            Console.WriteLine("Default values of mouse colo: " + mouse_color);  
  
            Console.WriteLine();  
        }  
  
        // parameterized constructor  
        public Ganesh_Statue(string x, string y) {  
            chain = x;  
            ring = y;  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine("**** Parameterized Constructor of base class starts from here ****");  
            Console.WriteLine("chain color: " + x + " ring color: " + y);  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine();  
        }  
  
        // function overloading without parameter  
        public void Do_Painting() {  
            Console.WriteLine("**** You are in Function Overloading Without Parameter ****");  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine();  
        }  
  
        // function overloading with parameter  
        public void Do_Painting(string Statue_Name) {  
            Console.WriteLine("**** You are in Function Overloading With 1 Parameter ****");  
            Console.WriteLine("Statue Name is: " + Statue_Name);  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine();  
        }  
  
        // operator overloading   
        //public static void operator brush(string paint)  
        //{  
        // // give color to statue  
        //}  
        // public static void operator brush(string paint)  
        //{  
        // // remove shadu from small surface area like between finger, below of eye, between legs, corner of legs / hands  
        //}   
  
        public void Do_Painting(string Statue_Name, string statue_2) {  
            Console.WriteLine("**** You are in Function Overloading With 2 Parameter ****");  
            Console.WriteLine("Statue 1st is: " + Statue_Name + "Statue 2nd is: " + statue_2);  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine();  
        }  
  
    }  
    class Derived: Ganesh_Statue {  
        public string sofa_color;  
        void add_functionality() {  
  
            sofa_color = "blue";  
            Console.WriteLine("**** Here we are going to achieve Inheritance ****");  
            Console.WriteLine("Eye color: " + Eye_Color + " skin color: " + Skin_Color);  
            Console.WriteLine("Added sofa color: " + sofa_color);  
            Console.WriteLine("____________________________________________________________________________");  
            Console.WriteLine();  
        }  
        static void Main(string[] arg) {  
            Ganesh_Statue obj1 = new Ganesh_Statue();  
            Ganesh_Statue obj = new Ganesh_Statue("silver", "diamond");  
            obj.Do_Painting();  
            obj.Do_Painting("soldiers in diwali festival");  
            obj.Do_Painting("animal", "shivaji statue");  
            Derived obj2 = new Derived();  
            obj2.add_functionality();  
            Console.ReadKey();  
        }  
  
    }  
}  

اکنون خروجی برنامه بصورت زیر می باشد:

مخرب

اکنون آنها بعد از 7 یا 10 روز به به نتیجه رسیدند و کارشان پایان یافت. این مخرب شی نامیده می شود.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 6 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید