Search
Generic filters

اینستاگرام رامان صفر و یک
طراحی و پیاده سازی انواع وب سایت و سیستم های تحت وب

آخرین مقالات

محصولات

برچسب ها

برچسب‌ها

ASP.NET backend frontend php PHP و ASP.NET PHP یا ASP.NET استراتژی طراحی وب سایت استفاده از کتابخانه PdfView اسلایدر افقی در اندروید اسلایدر افقی در برنامه نویسی اندروید الگوی معماری MVC برنامه نویس حرفه ای وب برنامه نویسی برنامه نویسی وب تجربه کاربر (UX) توسعه دهنده وب توسعه دهندگان وب توسعه وب حل مشکل اتصال به دیتابیس آنلاین در اندروید 8 به بالا داشتن نرم افزار های موفق درآمد برنامه نویسی دریافت نکردن اطلاعات از سمت سرور در اندروید رسم نمودار در برنامه نویسی اندروید رسم نمودار در برنامه نویسی اندروید با کتابخانه MPAndroidChart روش ایجاد اسلایدر افقی در برنامه نویسی اندرود سمت سرور سمت کلاینت شروع برنامه نویسی موبایل طراح UI طراح UX طراحی UX و UI طراحی UX یا UI طراحی استراتژیک وب طراحی رابط کاربر (UI) طراحی وب طراحی وب سایت عدم اتصال به دامنه های http در اندروید فروش موفق نرم افزار مدل کلاینت-سرور موفقیت در دنیای نرم افزار نشان دادن فایل های pdf در برنامه نویسی اندروید نمایش pdf در موبایل چکونه برنامه نویسی موبایل را شروع کنیم ؟ کتابخانه PdfView گرفتن اطلاعات گوشی اندرویدی در برنامه نویسی

برنامه نویسی شی گرا (OOP) یک الگوی برنامه نویسی اساسی است که تقریباً هر توسعه دهنده در مقطعی از حرفه خود از آن استفاده می کند.
OOP محبوب ترین پارادایم(الگو) برنامه نویسی است و به عنوان روش استاندارد کدنویسی برای اکثر دوره های برنامه نویسی آموزش داده می شود.

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

برنامه نویسی شی گرا چیست؟

برنامه نویسی شی گرا (OOP):

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

یک شی را می توان به عنوان یک فیلد داده تعریف کرد که دارای ویژگی ها و رفتار منحصر به فرد است، و یا میتوان گفت ساختار یک برنامه نرم افزاری را به قطعات ساده و قابل استفاده مجدد(classes) برای ایجاد نمونه های جداگانه از اشیاء تبدیل میکند.

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

این شامل برنامه هایی برای ساخت و طراحی و همچنین اپلیکیشن های موبایل است، به عنوان مثال: OOP را می توان برای تولید نرم افزار شبیه سازی سیستم استفاده کرد.

برنامه نویسی شی گرا (OOP)

ویژگی های برنامه نویسی شی گرا (OOP):

همچنین سازماندهی یک برنامه شی گرا، روشی سودمند را برای برنامه نویسی مشارکتی ایجاد می کند، جایی که پروژه ها بین گروه ها تقسیم می شوند. از دیگر مزایای OOP شامل: قابلیت استفاده مجدد کد، مقیاس پذیری و کارایی است.

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

نمونه هایی از یک شی می تواند از موجودیت های فیزیکی متفاوت باشد، مانند انسانی که با ویژگی هایی مانند نام و نشانی توصیف می شود، تا برنامه‌های رایانه‌ای کوچک، مانند ویجت‌ها.

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

ساختار برنامه نویسی شی گرا چیست؟

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

▣ کلاس ها(Classes):

به طور خلاصه، کلاس ها اساساً انواع داده های تعریف شده توسط کاربر هستند،کلاس ها جایی هستند که به عنوان طرح اولیه برای ساختار متدهای جداگانه، اشیاء و ویژگی ها عمل می کنند.

کلاس ها شامل فیلدهایی برای ویژگی ها و متدهایی برای رفتارها هستند، برای مثال: کلاس Dog، شامل ویژگی های name و birthday هست، در حالی که متدهای آن شامل: bark() و updateAttendance().

به یاد داشته باشید که کلاس الگویی برای مدل‌سازی یک سگ است و یک شی از کلاسی که یک چیز دنیای واقعی را نشان می‌دهد نمونه‌سازی می‌شود.

متدها(Methods):

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

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

هنگامی که اشیاء جداگانه نمونه سازی می شوند، این اشیاء می توانند متدهای تعریف شده در کلاس را فراخوانی کنند،در قطعه کد زیر: متد bark در کلاس Dog تعریف شده است و متد bark() روی شی Rufus فراخوانی می شود.

▣ اشیاء(Objects):

نمونه هایی از یک کلاس هستند که با داده های مشخص و خاص ایجاد شده اند، اشیا می توانند با اشیاء دنیای واقعی یا یک موجود انتزاعی مطابقت داشته باشند.

وقتی کلاس در ابتدا تعریف می شود، توضیحات تنها شیئی است که تعریف می شود، به عنوان مثال: در قطعه کد زیر وقتی کلاس جدید Dog نامیده می شود:

  • یک شی جدید به نام روفوس(rufus) ایجاد می شود.

  • سازنده آرگومان‌های name & birthday را اجرا می‌کند و مقادیری را اختصاص می‌دهد.

▣ ویژگی ها(Attributes):

اطلاعاتی هستند که  ذخیره می شوند و محل تعریف آن ها در قالب Class است و وضعیت یک شی را نشان می دهند.

هنگامی که اشیاء نمونه سازی می شوند، اشیاء دارای داده های ذخیره شده در فیلد Attributes هستند، ویژگی های کلاس(Class attributes) متعلق به خود کلاس است.

وضعیت یک شی با داده های موجود در فیلدهای Attributes شی تعریف می شود، به عنوان مثال: ممکن است با یک توله سگ و یک سگ در کمپ حیوانات خانگی متفاوت رفتار شود، تولد می‌تواند وضعیت یک شی را تعریف کند و به نرم‌افزار اجازه دهد تا سگ‌های سنین مختلف را به‌طور متفاوتی اداره کند.

  1. class Dog {
  2.     constructor(name, birthday) {
  3.         this.name = name;
  4.         this.birthday = birthday;
  5.     }
  6.     //Declare private variables
  7.     _attendance = 0;
  8.     getAge() {
  9.         //Getter
  10.         return this.calcAge();
  11.     }
  12.     calcAge() {
  13.         //calculate age using today’s date and birthday
  14.         return Date.now() – this.birthday;
  15.     }
  16.     bark() {
  17.         return console.log(“Woof!”);
  18.     }
  19.     updateAttendance() {
  20.         //add a day to the dog’s attendance days at the petsitters
  21.         this._attendance++;
  22.     }
  23. }
  24. //instantiate a new object of the Dog class, and individual dog named Rufus
  25. const rufus = new Dog(“Rufus”, “2/1/2017”);

اصول اصلی OOP چیست؟

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

  • کپسوله سازی: حاوی اطلاعات در یک شی است که فقط اطلاعات انتخاب شده را در معرض نمایش قرار می دهد
  • Abstraction: فقط روش های عمومی سطح بالا برای دسترسی به یک شی را نشان می دهد
  • وراثت: کلاس های فرزند داده ها و رفتارها را از کلاس والد به ارث می برند
  • چند شکلی: بسیاری از روش ها می توانند کار مشابهی را انجام دهند

برنامه نویسی شی گرا بر اساس اصول زیر است:

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

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

سپس، هنگامی که یک شی از کلاس نمونه سازی می شود، داده ها و متدها در آن شی کپسوله می شوند. کپسوله سازی اجرای کد نرم افزار داخلی را در یک کلاس پنهان می کند و داده های داخلی اشیاء درونی را پنهان می کند.

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

کپسوله سازی مستلزم تعریف برخی از فیلدها به عنوان خصوصی(Private) و برخی به عنوان عمومی(Public) است:

  • Private/Internal Interface: متدها و خصوصیات، قابل دسترسی از سایر متدهای هم کلاس.
  • Public / External Interface: متدها و ویژگی‌هایی که از خارج کلاس نیز قابل دسترسی هستند.

مزایای کپسولاسیون در اینجا خلاصه می شود:

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

▣ انتزاع – مفهوم – برداشت(Abstraction):

اشیاء فقط مکانیسم های داخلی را نشان می دهند که برای استفاده از اشیاء دیگر مرتبط هستند و هر کد پیاده سازی غیر ضروری را پنهان می کنند.

انتزاع این معنی است که کاربر تنها با ویژگی ها و روش های انتخاب شده یک شی تعامل دارد و از ابزارهای سطح بالا و ساده شده برای دسترسی به یک شی پیچیده استفاده می‌کند.

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

مزایای انتزاع در زیر خلاصه می شود:

  • رابط های کاربری ساده و سطح بالا
  • کد پیچیده پنهان است
  • انتزاع امتدادی از کپسولاسیون است
  • امنیت
  • تعمیر و نگهداری نرم افزار آسان تر
  • به روزرسانی کد به ندرت انتزاع را تغییر می دهد

برنامه نویسی شی گرا (OOP)

▣ وراثت(Inheritance):

وراثت به کلاس ها اجازه می دهد تا ویژگی های کلاس های دیگر را به ارث ببرند و دوباره استفاده کنند.

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

این ویژگی OOP باعث تجزیه و تحلیل داده‌های دقیق‌تر می‌شود، زمان توسعه را کاهش می‌دهد و سطح بالاتری از دقت را تضمین می‌کند.

اگر صفات و رفتارهای اساسی در یک کلاس والد تعریف شده باشند، می‌توان کلاس‌های فرزند خاص‌تری را ایجاد کرد و عملکرد کلاس والد را گسترش داد و ویژگی‌ها و رفتارهای اضافی را اضافه کرد.

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

▣ پلی مورفیسم(Polymorphism):

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

با استفاده از وراثت، اشیاء می توانند رفتارهای مشترک والدین را با رفتارهای خاص فرزند لغو کنند، چند شکلی به یک متد اجازه می دهد تا رفتارهای مختلف را به دو صورت اجرا کند.

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

چند شکلی به انواع مختلف اشیاء اجازه می دهد تا از یک رابط عبور کنند:

Method Overriding:

چندشکلی در زمان اجرا از متد Overriding استفاده می کند، در روش overriding، یک کلاس فرزند می تواند پیاده سازی متفاوتی نسبت به کلاس والد خود ارائه دهد.

Method Overriding:

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

مزایای پلی مورفیسم عبارتند از:

  • اشیاء از انواع مختلف می توانند از طریق یک رابط منتقل شوند
  • Method Overriding
  • Method Overloading

چند نمونه از زبان های برنامه نویسی شی گرا:

در حالی که Simula به عنوان اولین زبان برنامه نویسی شی گرا شناخته می شود، امروزه بسیاری از زبان های برنامه نویسی دیگر با OOP استفاده می شوند.
اما برخی از زبان های برنامه نویسی بهتر از سایرین با OOP جفت می شوند.
برای مثال، زبان‌های برنامه‌نویسی که زبان‌های OOP خالص در نظر گرفته می‌شوند، همه چیز را به عنوان یک شی در نظر می‌گیرند.
سایر زبان‌های برنامه‌نویسی عمدتاً برای OOP طراحی شده‌اند، اما شامل برخی فرآیندهای رویه‌ای هستند.

برنامه نویسی شی گرا (OOP)

به عنوان مثال، زبان های محبوب OOP خالص عبارتند از:

  • Ruby
  • Scala
  • JADE
  • Emerald

زبان های برنامه نویسی که عمدتاً برای OOP طراحی شده اند عبارتند از:

  • Java
  • kotlin
  • Python
  • C++

سایر زبان های برنامه نویسی که با OOP جفت می شوند عبارتند از:

  • Visual Basic .NET
  • PHP
  • JavaScript

مزایای OOP چیست؟؟

  • مزایای OOP عبارتند از: مدولار یا ماژولی بودن(Modularity): کپسوله سازی اشیاء را قادر می سازد تا در خود محفوظ باشند و عیب یابی و توسعه مشارکتی را آسان تر می کند.
  • بهره وری(Productivity): برنامه نویسان می توانند با استفاده از کتابخانه های متعدد و کدهای قابل استفاده مجدد سریعتر برنامه های جدید بسازند.
  • به راحتی قابل ارتقا و مقیاس پذیر است(Easily upgradable and scalable): برنامه نویسان می توانند عملکردهای سیستم را به طور مستقل پیاده سازی کنند.
  • شرح رابط(Interface descriptions): توضیحات سیستم های خارجی به دلیل تکنیک های ارسال پیام که برای ارتباط اشیا استفاده می شود، ساده است.
  • امنیت(Security): با استفاده از کپسوله سازی و انتزاع، کدهای پیچیده پنهان می شوند، نگهداری نرم افزار آسان تر می شود و پروتکل های اینترنتی محافظت می شوند.
  • قابلیت استفاده مجدد کد(Reusability): را می توان از طریق وراثت دوباره استفاده کرد، به این معنی که یک تیم مجبور نیست یک کد را چندین بار بنویسد.
برنامه نویسی شی گرا (OOP)
  • انعطاف پذیری(Flexibility): چند شکلی یک تابع را قادر می سازد تا با کلاسی که در آن قرار گرفته است سازگار شود. اشیاء مختلف نیز می توانند از یک رابط عبور کنند.

انتقادات وارد به OOP چیست؟

مدل برنامه نویسی شی گرا به دلایل متعدد مورد انتقاد توسعه دهندگان قرار گرفته است.
بزرگترین نگرانی این است که OOP بیش از حد بر مؤلفه داده توسعه نرم افزار تأکید می کند و به اندازه کافی روی محاسبات یا الگوریتم ها تمرکز نمی کند.
بعلاوه، نوشتن کد OOP ممکن است پیچیده تر باشد و کامپایل آن زمان بیشتری ببرد.

برنامه نویسی شی گرا (OOP)

روش های جایگزین برای OOP عبارتند از:

▣ برنامه نویسی تابعی این شامل زبان‌هایی مانند: Erlang و Scala می‌شود که برای مخابرات و سیستم‌های مقاوم به خطا استفاده می‌شوند.

▣ برنامه نویسی ساختاریافته یا مدولار، این شامل زبان هایی مانند: PHP و C# می شود.

▣در برنامه نویسی منطقی این روش که بیشتر مبتنی بر منطق رسمی است و از زبان هایی مانند Prolog استفاده می کند
شامل مجموعه ای از جملات است که حقایق یا قواعدی را در مورد یک حوزه مشکل بیان می کند، بر روی وظایفی تمرکز می کند که می توانند از پرس و جوهای منطقی مبتنی بر قانون بهره مند شوند.

▣ برنامه نویسی ضروری این جایگزین برای OOP به جای مدل‌ها بر روی عملکرد تمرکز می‌کند و شامل C++ و جاوا می‌شود.

▣ برنامه نویسی اعلانی این روش برنامه نویسی شامل اظهاراتی در مورد اینکه کار یا نتیجه مطلوب چیست، اما نه نحوه دستیابی به آن را شامل می شود، زبان ها عبارتند از: Prolog و Lisp.

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

نتیجه:

توسعه دهندگانی که با OOP و میکروسرویس ها کار می کنند می توانند با به کارگیری اصول OOP به مسائل رایج میکروسرویس ها بپردازند.

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

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

به طور کلی، پیاده سازی OOP امکان ساختار داده و قابلیت استفاده مجدد بهتر را فراهم می کند و در دراز مدت در زمان صرفه جویی می کند.


مهدی شیخی _ گروه نرم افزاری رامان صفر و یک

اگر برنامه نویس هستید، خواندن این مقالات خالی از لطف نیست.

برنامه نویسان عزیز با خواندن این مقالات می‌توانند بسیار موفق‌تر عمل کنند.

۱ دیدگاه. ارسال دیدگاه جدید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
برای ادامه، شما باید با قوانین موافقت کنید

آخرین مقالات منتشر شده

آخرین آموزش های کوتاه