„Здравей, Амиго! Днес ще ти отворя един нов и интересен свят. Говоря за обектно-ориентирано програмиране (ООП) . Вече си се запознал с класовете и обектите. Днес ще отидеш да науча повече за тях, много повече."
Ще започнем с четирите стълба на ООП. Те са абстракция, капсулиране, наследяване и полиморфизъм. (Преди имаше три, но абстракцията беше добавена по-късно)
1) Абстракция.
Добър пример за абстракция в реалния живот са длъжностните характеристики във фирма. Длъжността е едно, но задълженията са съвсем различен въпрос.
Представете си, че създавате организационната схема за вашата бъдеща компания. Може да разделите задълженията на секретар, като ги разпределите на няколко други позиции. Можете да разделите работата на главния изпълнителен директор на няколко отделни позиции: главен финансов директор, главен технологичен директор, главен маркетинг директор, главен директор човешки ресурси. Или можете да комбинирате позициите на офис мениджър и специалист по подбор на персонал в една.
Да предположим, че измисляте имена за позиции във вашата компания и след това „разпределяте“ отговорностите за тези позиции. Това е абстракция - разделяне на нещо голямо и монолитно на няколко малки части.
От гледна точка на програмиста, абстракцията е правилно разделяне на програма на обекти.
Голяма програма обикновено може да бъде представена като взаимодействащи обекти по всеки от дузина различни начини. Абстракцията ви позволява да изберете основните характеристики на даден обект и да пропуснете всичко по-малко важно.
Абстракцията е като военна стратегия. Ако изберете грешната стратегия, ниHowви гениални тактики няма да спасят положението.
2) Капсулиране.
Капсулирането има за цел да подобри взаимодействието между обектите чрез опростяването им.
Най-добрият начин да опростите нещо е да скриете нещо сложно от онези, които не трябва да знаят за него. Например, ако седнете зад пилотското управление на самолет Boeing, ще отнеме много време, за да разберете How работят:
От друга страна, всичко изглежда по-просто за пътниците в самолета: те купуват билет и се качват на самолета, който след това излита и каца. Можете лесно да летите от континент на континент, като знаете само How да «купите билет» и «да се качите на самолет». Не виждаме ниHowва сложност, свързана с подготовката на самолета за полет, излитане, кацане и различни потенциални аварийни ситуации. И не сме споменали сателитна навигация, автопилот и центрове за контрол на въздушното движение. Това опростява живота ни.
От гледна точка на програмирането, капсулирането е „скриване на изпълнението“. Харесвам това определение. Нашият клас може да съдържа стотици методи и да реализира изключително сложно поведение в различни ситуации. Но можем да скрием всичките му методи от любопитни очи (като ги маркираме като « private »), оставяйки само два or три метода за взаимодействие с други класове (като ги маркираме като « public »). Тогава всички други класове в нашата програма ще виждат и ще извикват само тези няколко метода на този клас . Цялата сложност на класа ще бъде скрита вътре, точно Howто пилотската кабина е защитена от погледа на щастливите пътници.
3) Наследство.
Наследяването е концепция в програмирането и реалния живот. В програмирането наследяването е специална връзка между два класа. Но наследяването в реалния живот е много по-интересно.
Ако трябва да създадем нещо в реалния живот, имаме две възможности:
1) да направим това, от което се нуждаем, от нулата и да отделим много време и усorя за това.
2) направим това, от което се нуждаем, използвайки неща, които вече съществуват.
Най-добрата стратегия е следната: Взимаме съществуващо добро решение, преработваме го и го настройваме, за да отговори на нашите нужди, и след това го използваме.
Помислете за човешката еволюция. Ако проследим началото им до началото на живота на планетата, ще видим, че са минали мorарди години. Но ако мислим, че хората започват от маймуните, тогава са минали само няколко мorона години. Създаването на нещо от нулата отнема повече време. Много по-дълго.
По подобен начин в програмирането можем да създадем един клас на базата на друг. Новият клас става потомък (наследник) на съществуващ клас. Това е супер полезно, когато вече имате клас, който съдържа 80-90% от необходимите данни и методи. Ние просто декларираме подходящ клас като родител на нашия нов клас. Всички данни и методи на родителския клас автоматично стават част от новия клас. Удобно, нали?
4) Полиморфизъм.
Полиморфизмът е концепция за програмиране, която описва ситуацията, при която различни реализации са скрити зад един и същи интерфейс. За да намерим аналог в реалния живот, можем да разгледаме процеса на управление на автомобил.
Ако човек може да кара камион, той or тя може да бъде поставен зад волана на линейка or спортна кола. Човек може да управлява кола, независимо от вида на колата, защото всички имат един и същ интерфейс за управление: волан, педали и скоростен лост. Автомобorте са организирани по различен начин вътре, но всички споделят един и същ контролен интерфейс.
Върнете се към програмирането, полиморфизмът ни позволява да взаимодействаме с обекти от различни класове (обикновено с общ прародител) по един и същи начин. Значението на това не може да бъде надценено. Това става все по-важно, когато програмата се разраства.
ООП е принципи. Закони за програмиране. Всеки от тях ни ограничава по няHowъв начин, но в замяна предоставя огромни предимства , тъй като програмите се разрастват. Четирите принципа на ООП са като четирите крака на стол. Ако премахнете дори един от тях, цялата система става нестабилна.
GO TO FULL VERSION