Обектно-ориентирано програмиране: значение и принципи

Обектно-ориентирано програмиране: значение и принципи
  • 2020 преглеждания

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

В днешната статия ще се запознаем с идеите зад обектно-ориентираното програмиране и неговите принципи. Какво е то, с какво се различава от останалите видове програмиране и какви са ползите от него - четете надолу.

Какво е обектно-ориентирано програмиране?

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

Какво е специалното при ООП? Ето пример от самия Стив Джобс в интервю с Rolling Stones:

“Ако аз съм вашият обект за пране, можете да ми дадете мръсните си дрехи и да ми изпратите съобщение, което гласи: „Можете ли да ми изперете дрехите, моля“. Случайно знам къде е най-добрата пералня в Сан Франциско. Говоря английски и имам пари в джобовете си. Така че излизам, спирам такси и казвам на шофьора да ме закара до това място в Сан Франциско. Отивам да ти изпера дрехите, връщам се в таксито и се връщам тук. Давам ви чистите ви дрехи и казвам: „Ето ви чистите дрехи.“

Нямате представа как съм го направил. Нямате познания за мястото за пране. Може би говорите френски и дори не можете да хванете такси. Не можете да платите за такова, нямате пари в джоба си. И все пак знаех как да направя всичко това. А вие нямахте нужда да знаете как. Цялата тази сложност беше скрита вътре в мен и успяхме да си взаимодействаме на много високо ниво на абстракция. Това са обектите. Те капсулират сложността и интерфейсите към тази сложност са на високо ниво.”

Тоест, при обектно-ориентирания език за програмиране на първо място са обектите и класовете. Те са там да изпълнят своите задачи без да затормозяват потребителя. Това се случва по възможно най-гъвкав и оптимизиран начин. Ако искате да прочетете повече относно класове и обекти в ООП, вижте повече в статията ни за обектно-ориентирано програмиране.

Методологията може да бъде използвана при голяма част от програмните езици, но някои от тях са особено подходящи като Java, C#, Python, C++, JavaScript и др. Освен обектно-ориентирано програмиране има и множество други видове и методологии:

Други видове програмни езици

Примери

Процедурно програмиране

Процедурното програмиране се фокусира върху дефинирането на процедури (функции или рутинни процедури), които работят с данни. То следва линеен, поетапен подход за решаване на проблеми.

C, Pascal, Fortran

Функционално програмиране

Функционалното програмиране третира изчислението като оценка на математически функции. Подчертава неизменността и избягва променящото се състояние и променливите данни.

Haskell, Lisp, Erlang, F#

Логическото програмиранe

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

Prolog, Mercury

Скриптовите езици

Скриптовите езици са предназначени за скриптове или автоматизиране на задачи. Те често имат динамично въвеждане и се интерпретират, а не компилират.

Python, Ruby, JavaScript, Perl

Маркиращи езици

Езиците за маркиране се използват за определяне на структурата и представянето на документи, често използвани за уеб съдържание и форматиране.

HTML, XML

Езици, специфични за домейна (DSL)

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

SQL, CSS

Едно от нещата, които фундаментално различават обектно-ориентираното програмиране от останалите видове, изброени в таблицата, са принципите, на които то стъпва. Кои са те разглеждаме в следващата точка.

ООП принципи - Абстракция, Капсулация, Наследяване и Полиморфизъм

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

Имайте предвид, че тези принципи са теоретични - можем да ги сравним с практически примери от ежедневието, но в крайна сметка те са повече начин на мислене и построяване на логика.

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

Абстракция

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

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

абстракция ооп принципи

Абстракциите в ООП позволяват на програмиста да се концентрира върху концепциите от високо ниво без да задълбава в сложно изпълнение. Те помагат за по-управляем процес на разработка и опростяване на изготвянето на софтуера като цяло.

Капсулaция

Капсулацията най-просто казано е групиране на данни и функции в клас, основно с цел сигурност, но и по-удобно ползване. Класовете могат да бъдат публични и скрити, в зависимост от нуждите на приложението и преценката на програмиста - това се нарича data hiding.

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

капсулация ооп принципи

Капсулирането гарантира, че всеки клас скрива вътрешната си работа и осигурява контролиран достъп до данни. По този начин потребителите на приложението могат да взаимодействат с Plant и Garden, без директно да манипулират основните структури от данни.

Наследяване

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

В приложението ни има различни видове растения: цветя, зеленчуци и дървета. Вместо да създавате отделни класове за всеки тип, можете да използвате наследяване, за да извлечете подкласове от общ суперклас Plant. Всеки подклас наследява атрибутите и методите на родителския клас, като същевременно има свои собствени уникални характеристики. Например подкласът Flower може да има методи, свързани със сезоните на цъфтеж, докато подкласът Vegetable може да включва методи за изчисляване на датите на прибиране на реколтата

наследяване ооп принципи

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

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

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

В аналогията с приложение за градинарство, полиморфизъм би било дефиниране на метод “Поддръжка” в клас Plant. Всеки подклас (напр. цветя, зеленчуци) би приложил този метод по различен начин, спрямо специфичните нужди за поддръжка на растението. Така интерфейсът се запазва, но функциите зависят от конкретните характеристики на подкласа, независимо към кой суперклас спада той

полиморфизъм ооп принципи

Предимства на обектно-ориентираното програмиране

От принципите на ООП се раждат множеството предимства на този вид програмиране. Част от тях включват:

  • Мащабируемост и лесно надграждане - заради принципи като капсулиране и наследяване програмистите могат индивидуално да правят промени по кода без да нарушават текущите му функции;
  • Преизползване - отново чрез наследяване самата работа на програмиста се улеснява, тъй като не му се налага да пише един и същ код няколко пъти;
  • Сигурност - абстракциите и капсулирането помагат за скриването и защитата на сложните части от кода и улесняват поддръжката;
  • Гъвкавост - полиморфизмът позволява на обектите и функциите да са адаптивни и помага за по-семпло изграждане на код.

Независимо дали ще избереш ООП като твоя методология в програмирането или ще я комбинираш с други идеи и концепции, едно е сигурно - IT секторът е един от малкото професионални сектори, които могат да ти донесат стабилност и успех. Стани част от него и развий дигиталните си умения с Advance Academy!