1. Въвеждане на принципите на ООП

Днес ще откриете нов и интересен свят. Светът на обектно-ориентираното програмиране ( ООП ). Преди сте научor за класове и обекти. Днес ще научите повече за тях, много повече.

OOP се появи като отговор на нарастващата сложност на програмите. Когато променливите и методите в програмите започнаха да наброяват десетки хиляди, стана ясно, че нещо трябва да се направи. Едно решение беше да се комбинират данни и свързани методи в отделни обекти.

Сега програмистите трябваше отделно да опишат How обектите взаимодействат външно и How се държат вътрешно. Това направи много по-лесно разбирането и писането на програми. Остава обаче един въпрос: кои методи трябва да бъдат вътрешни за даден обект и кои трябва да са достъпни за други обекти?

Бяха опитани много подходи. И въз основа на откритите най-добри практики се появиха 4 принципа на OOP . Те са абстракция, капсулиране, наследяване и полиморфизъм . Преди това имаше само три, но по-късно експертите решиха да добавят и абстракция.


2. Абстракция

Хората в Интернет все още спорят относно определението за абстракция в ООП . Проблемът не е, че всички грешат. Това е, че всеки е прав . Колкото по-малка е една програма, толкова повече абстракция е свързана с езика Java. Колкото по-голяма е една програма, толкова повече абстракция е свързана с моделиране/опростяване на обекти от реалния свят.

Но най-добрите умове изглежда са съгласни, че:

Абстракцията е използването само на тези характеристики на даден обект, които го представят достатъчно точно в програма. Основната идея е да представите обекта с най-малък набор от полета и методи, които едновременно позволяват вашите задачи да бъдат решени с достатъчна точност .

В Java абстракцията се осъществява чрез абстрактни класове и интерфейси.

Абстракция в реалния живот

Добър пример за абстракция в реалния живот са длъжностните характеристики във фирма or организация. Наименованието на длъжността е едно, но конкретните отговорности, възложени на длъжността, са съвсем различен въпрос.

Представете си, че проектирате организационната структура на бъдещата си компания. Можете да разделите секретарските отговорности, като ги разпръснете на няколко различни позиции. Можете да разделите длъжността CEO на няколко отделни позиции: CFO, CTO, CMO, HR Director. Или, например, можете да комбинирате позициите на офис мениджър и специалист по подбор в една.

Вие измисляте длъжности и след това разпределяте отговорностите за тези позиции. Абстракцията е откъсване от обекта като цяло и избиране на основните свойства и компоненти, от които се нуждаем.

Представяне на принципите на ООП.  Абстракция

От гледна точка на програмирането, абстракцията е правилното разделяне на програма на обекти . Обикновено има десетки начини за представяне на всяка голяма програма като взаимодействащи обекти. Абстракцията ви позволява да изберете съществените характеристики и да игнорирате несъществените.


3. Капсулиране

Целта на капсулирането е да подобри взаимодействията чрез опростяване на обектите.

А най-добрият начин да опростите нещо е да скриете всичко сложно от любопитни очи. Например, ако ви качат в пилотската кабина на Boeing jumbo jet, няма веднага да разберете How да го управлявате:

Но за пътниците в самолета всичко е по-просто: купувате билет и се качвате на самолета, който излита и след това каца. Можете лесно да летите от един континент до друг само с възможността да „купите билет“ и „да се качите на самолет“. Цялата сложност на подготовката на самолета за полет, излитане, кацане и различни аварийни ситуации е скрита от вас. Да не говорим за центровете за сателитна навигация, автопилот и контрол на въздушното движение. И това опростява живота за нас.

От гледна точка на програмиране, капсулирането е "скриване на изпълнението". Харесвам това определение. Нашият клас може да съдържа стотици методи и да прилага много сложни поведения в различни ситуации. Но можем да скрием всичките му методи от любопитни очи (като ги маркираме с модификатора private) и да оставим само два or три метода за взаимодействие с други класове (като ги маркираме с модификатора public). Тогава всички други класове на нашата програма ще виждат само трите публични метода и ще ги извикват, но не и други. И цялата сложност ще бъде скрита вътре в класа, точно Howто пилотската кабина е скрита от щастливите пътници.


4. Наследство

Има две страни на наследството . Наследяване в програмирането и наследяване в реалния живот. В програмирането наследяването е специална връзка между два класа . Но наследяването в реалния живот е много по-интересно.

Ако трябва да създадем нещо в реалния живот, имаме две възможности:

  1. Създайте нещото, от което се нуждаем, от нулата, отделяйки много време и усorя.
  2. Създайте това, от което се нуждаем, на базата на нещо, което вече съществува.

Оптималната стратегия е следната: вземете съществуващо добро решение, модифицирайте го малко, коригирайте го, за да отговаря на нашите нужди, и след това го използвайте.

Ако проследим човешката история до нейното начало, ще открием, че са изминали мorарди години от началото на живота на планетата. Но ако приемем, че отправната точка на хората са нашите предци-примати (т.е. хората са „базирани на“ предци-примати), тогава са минали само няколко мorона години. Изграждането от нулата отнема повече време. Много по-дълго.

В програмирането можете да направите нещо подобно, като създадете един клас на базата на друг. Новият клас произлиза от (наследява) съществуващия клас. Това е много полезно, когато съществуващ клас има 80-90% от данните и методите, от които се нуждаем. Ние просто декларираме подходящия клас като родител на нашия нов клас и всички данни и методи на родителския клас автоматично се появяват в новия клас. Удобно, нали?


5. Полиморфизъм

Полиморфизмът е концепция за програмиране. Той описва ситуация, при която различни реализации са скрити зад един интерфейс. Поглеждайки към реалния живот за аналог, откриваме, че управлението на превозно средство е подходящо.

Ако някой може да кара камион, тогава може да бъде поставен и зад волана на линейка or зад волана на спортна кола. Човек може да управлява автомобил, независимо от вида на автомобила, защото всички автомобor имат един и същ контролен интерфейс: волан, педали и скоростен лост. Вътрешните части на автомобorте са различни, но всички имат един и същ контролен интерфейс.

Връщайки се към света на програмирането, полиморфизмът позволява обекти от различни класове (обикновено имащи общ прародител) да бъдат достъпни по един и същ начин, свойство, чиято стойност трудно може да бъде надценена. Стойността му се увеличава с увеличаването на програмата.

OOP означава принципи. Вътрешни закони. Всеки от тях ни ограничава по няHowъв начин, но осигурява големи ползи в замяна, когато програмата стане голяма. Четирите принципа на ООП са като четирите крака на маса. Махнете един и цялата система става нестабилна.