ООП е какво? Основни принципи на обектно-ориентираното програмиране
Защо в повечето проекти се предпочита обектно-ориентираното програмиране? ООП предлага ефективен начин за справяне с тяхната сложност. Вместо да разглежда програмата като последователност от изпълними инструкции, тя я представя като група от обекти с определени свойства и изпълнява определени действия с тях. Това води до създаването на по-ясни, по-надеждни и лесни за използване приложения.
съдържание
Основни принципи обектно-ориентирано програмиране (OOP) Създават се, защото в по-ранните подходи са открити ограничения. Сред тях - неограничен достъп до данни и голям брой връзки, които налагат ограничения върху въвеждането на промени. Тяхното съзнание и причини са важни, за да разберем какво е ООП в програмирането и какви са неговите предимства.
Процедурни езици
C, Pascal, FORTRAN и други подобни езици са процедурни. Това означава, че всеки от техните оператори поръчва на компютъра да направи нещо: да получи данните, да добави числата, да ги раздели на шест, да покаже резултата. Приложението за процедурни езици е списък с инструкции. Ако е малък, не се изисква друг организационен принцип (често наричан парадигма). Програмистът създава списък с инструкции и компютърът ги изпълнява.
Разделяне на функции
Когато заявленията станат по-големи, списъкът се оказва тромав. Малцина могат да разберат повече от няколко стотин инструкции, докато не бъдат групирани заедно. Поради тази причина функцията се е превърнала в начин да се направят приложенията по-разбираеми за създателите им. На някои езици същата концепция може да се нарече подпрограма или процедура.
Приложението е разделено на функции, всяка от които има ясно определена цел и интерфейс.
Идеята за разделяне в процедурите може да бъде разширена чрез групирането им в по-голям обект, наречен модул, но принципът е подобен: групиране на компоненти, които изпълняват списъци с инструкции.
Разделянето на функции и модули е един от крайъгълните камъни на структурното програмиране, което за няколко десетилетия преди появата на ООП е превантивна парадигма.
Проблеми на структурираното програмиране
С увеличаването на приложенията, структурирано програмиране започвайки да изпитва трудности. Проектите станаха твърде сложни. Графиките се изместиха. По-голям брой програмисти бяха включени. Сложността нарастваше. Разходите скочиха нагоре, графиката се движеше по-нататък и се стигна до колапса.
Анализът на причините за тези неуспехи разкри недостатъците на процедурната парадигма. Независимо колко добре се изпълнява структуриран подход към програмирането, големите приложения стават прекалено сложни.
Какви са причините за тези проблеми, свързани с процедурните езици? Първо, функциите имат неограничен достъп до глобални данни. На второ място, несвързаните процедури и значения не моделират реалния свят.
Ако разглеждаме тези проблеми в контекста на програма за счетоводно отчитане, един от най-важните елементи от глобалните данни е съвкупността от счетоводни единици. Различните функции могат да имат достъп до тях, за да въведат нова стойност, да я покажат, да я променят и т.н.
Неограничен достъп
В програма, написана например в C, има два вида данни. Местните са скрити във функцията и другите процедури не се използват.
Когато две или повече функции трябва да имат достъп до едни и същи данни, тогава последната трябва да е глобална. Това, например, е информация за елементите, които трябва да бъдат взети под внимание. Глобалните данни могат да бъдат достъпни чрез всяка процедура.
В голяма програма има много функции и много глобални елементи. Проблемът с процедурната парадигма е, че това води до още по-голям брой потенциални връзки между тях.
Такъв голям брой съединения причинява няколко трудности. Първо, това усложнява разбирането за структурата на програмата. Второ, това затруднява промяната. Промяната в глобален елемент от данни може да изисква корекция на всички функции, които имат достъп до него.
Например, в счетоводната програма някой реши, че кодът на обекта не трябва да се състои от 5 цифри, а по-скоро от 12. Това ще изисква промяна тип данни от кратко до дълго. Сега функциите, свързани с кода, трябва да бъдат променени, за да работят с новия формат.
Когато елементите се променят в голямо приложение, е трудно да се каже кои процедури имат достъп до тях. Но дори и това да е изяснено, промяната им може да доведе до неправилна работа с други глобални данни. Всичко е свързано с всичко останало, така че промяната на едно място ще бъде в друга.
Реално моделиране
Вторият и по-важен проблем на процесуалната парадигма е, че местоположението й на отделни данни и функции не моделира нещата в реалния свят. Тук се занимаваме с такива обекти като хора и коли. Те не изглеждат като данни или функции. Комплексните реални обекти имат атрибути и поведение.
атрибути
Примерите за атрибути (понякога наричани характеристики) за хората са цвят на очите и длъжност, за автомобили - мощност и брой врати. Както се оказа, атрибутите в реалния свят са еквивалентни на данните в програмата. Те имат специфични значения, като син (цвят на очите) или четири (брой врати).
поведение
Поведение е това, което обектите от реалния свят произвеждат в отговор на някакво въздействие. Ако поискате от властите да повишат заплатите си, отговорът е "да" или "не". Ако натиснете спирачката, автомобилът спира. Наричането и спирането са примери за поведение. Поведението е като процедура: призована е да направи нещо и го прави. По този начин данните и функциите сами по себе си не моделират ефективно обектите от реалния свят.
Решаването
Обектът в OOP е представен като набор от данни и функции. Само процедурите, които се наричат членни функции в C ++ ви позволяват да получите своите стойности. Данните са скрити и защитени от промяна. Стойностите и функциите са капсулирани в една единица. Капсулирането и скриването са главните термини в описанието на езиците OO.
Ако искате да промените данните, знаете точно кои функции взаимодействат с тях. Няма достъп до други процедури. Това опростява писането, отстраняването на грешки и поддържането на програмата.
Приложението по правило се състои от няколко обекта, които си взаимодействат, наричайки функциите на членовете.
Днес най-широко използваният език на OOP (обектно-ориентираното програмиране) е C ++ (плюс-плюс). Java няма някои функции, като указатели, шаблони и множествено наследство, което го прави по-малко мощен и универсален от C ++. C # все още не е достигнал популярността на C ++.
Трябва да се отбележи, че т.нар. Членни функции в C ++ се наричат методи в някои други OO езици, като Smalltalk. Елементите на данните се наричат атрибути. Извикването на обемен метод изпраща съобщение до него.
аналогия
Можете да изпращате предмети в отделите на компанията. В повечето организации, служителите не работят един ден с кадри, следващата в щатски долари, а след това една седмица в търговията на дребно. Всяко отделение има собствен персонал с ясно определени отговорности. Има и собствени данни: заплати, данни за продажбите, записи на служители и т.н. Хората в отделите работят с информацията си. Разделянето на компанията по този начин улеснява контрола върху неговите дейности и поддържа целостта на данните. Счетоводството е отговорно за фишове. Ако трябва да знаете общата сума на заплатите, платени в южния клон през юли, не е нужно да се вмъквате в архива. Достатъчно е да изпратите бележка на отговорното лице, да изчакате този човек да получи достъп до данните и да изпрати отговор с необходимата информация. Това гарантира спазването на правилата и липсата на външна намеса. По същия начин, обектът в OOP осигурява организацията на приложението.
Трябва да се помни, че ориентацията към обектите не засяга подробностите за програмата. Повечето C ++ изрази съответстват на процедурни езикови оператори като C. В действителност членските функции в C ++ са много близки до функциите в C. Само един по-широк контекст ще позволи да се установи дали инструкцията е процедурна или обектно ориентирана.
Обект в OOP: определение
Когато разглеждаме проблема с програмирането на езика на OO, вместо въпроси за отделянето му в отделни функции, възниква проблемът с разделянето на обекти. ОП мисленето прави много по-лесно разработването на приложения. Това се дължи на сходството на софтуера и реалните обекти.
Какви неща стават обекти в OOP? По-долу са типичните категории.
Физическият обект в ООП е:
- транспорт в потоци;
- електрически елементи в програмите за проектиране на електрически вериги;
- страните в модела на икономиката;
- въздухоплавателни средства в системата за контрол на въздушното движение.
Елементи на компютърната среда на потребителя:
- меню;
- прозорци;
- графики (линия, правоъгълник, кръг);
- клавиатура, мишка, принтер, дискови устройства.
хора:
- работници;
- студенти;
- клиенти;
- продавачи.
информация:
- счетоводна книга;
- личен въпрос;
- речника;
- таблица с ширини и дължини на населените места.
Връзката между обектите от реалния свят и ООП е резултат от комбинация от функции и данни: революционизираха програмирането. Няма толкова тясна кореспонденция в процедурните езици.
клас
Обекти в ПП са членове на класове. Какво означава това? Вградени езици за програмиране типове данни. тип int, т.е. цяло число, е предварително дефинирано в C ++. Можете да декларирате произволен брой int променливи.
По същия начин се определя набор от обекти от същия клас. Той дефинира функциите и данните, включени в обектите, без да ги създава, точно както int не създава променливи.
Класът в OOP е описание на редица подобни обекти. Принц, Стинг и Мадона са певци. Няма едно лице с това име, но хората могат да бъдат наричани, ако имат съответните характеристики. ОП обектът е пример за класа.
наследяване
В живота класовете са разделени на подкласове. Например животните са разделени на земноводни, бозайници, птици, насекоми и др.
Принципът на този вид разделение е, че всеки подклас има общи характеристики с класа, от който той се проявява. Всички автомобили имат колела и двигател. Това са определящите характеристики на превозните средства. В допълнение към общите характеристики, всеки подклас има свои собствени характеристики. Автобусите имат много места, а камионите имат място за превоз на тежки товари.
По същия начин, базовият клас може да стане родител на няколко извлечени подкласове, които могат да бъдат дефинирани така, че да споделят своите характеристики с добавянето на техните собствени. Наследството е подобно на функция, която опростява процедурната програма. Ако няколко части от кода правят почти същото, можете да извлечете общите елементи и да ги поставите в една процедура. Три секции за кандидатстване могат да нарекат функция за извършване на общи действия, но също така могат да произвеждат свои собствени операции. По същия начин, базовият клас съдържа общи данни за производната група. Подобно на функциите, наследствеността намалява програмата OO и изяснява взаимосвързаността на нейните елементи.
рециклиране
След като класът е създаден и отстранен, той може да бъде предаден на други програмисти за повторна употреба в собствените си приложения. Това е подобно на библиотека от функции, които могат да бъдат включени в различни приложения.
В OOP, наследството е продължение на идеята за многократна употреба. От съществуващия клас, без да го променяте, можете да създадете нов с добавянето на други функции. Лекотата на повторното използване на съществуващия софтуер е важно предимство на OOP. Смята се, че това води до увеличаване на доходността от първоначалната инвестиция.
Създаване на нови типове данни
Обектите са удобни за създаване на нови типове данни. Да предположим, че програмата използва двуизмерни стойности (например координати или географска ширина и дължина) и има желание да се изразят действия с тях аритметични операции:
позиция1 = позиция + произход,
където позиция1, позиция и произход - двойки независими числови стойности. Създаването на клас, който включва тези две стойности и деклариране на променливи с неговите обекти, създава нов тип данни.
Полиморфизъм, претоварване
Операторите = (равни) и + (плюс), използвани в позиционната аритметика по-горе, не действат по същия начин, както с вградените типове, като int. Позицията на обектите и т.н. не са предварително дефинирани, но са програмирани. Как тези оператори знаят как да се справят с тях? Отговорът е, че за тях можете да дефинирате нови модели на поведение. Тези операции ще бъдат функции на членовете на класа Position.
Използването на оператори или процедури, в зависимост от това, с което работят, се нарича полиморфизъм. Когато съществуващ оператор, като + или =, може да работи с нов тип данни, се казва, че е претоварен. Претоварването в ООП е един вид полиморфизъм. Това е неговата важна особеност.
Книгата за ООП "Обектно-ориентирано програмиране за манекени" ще позволи на всеки да се запознае по-подробно с тази тема.
- Обектно-ориентирано програмиране
- Структурирано програмиране
- Java програмен език
- Списък на езиците за програмиране. Програмни езици на ниско и високо ниво
- Как да научите програмиране от нулата на популярни езици за програмиране
- Какво е Ruby? Програмен език "Ruby"
- Информатика. Основи на алгоритмизацията и програмирането
- Капсулиране е какво? Капсулиране в програмирането
- Най-популярните езици за програмиране. Програмни езици за начинаещи
- jаvascript: Примери за приложения
- Оценка на езиците за програмиране 2016
- jаvascript: Примери за приложения
- История на разработването на езици за програмиране: накратко за всичко
- Desktop: какво е това? Основни тълкувания на термина
- Използване на indexOf (jаvascript) при работа с масиви и низове
- Алгоритъм рекурсивен: описание, анализ, характеристики и примери
- Процедурното програмиране е какво?
- Синтаксис jаvascript parseInt: примери за използване
- Видове данни
- Класификация на езиците за програмиране по нива
- Защо да използвате езици за програмиране на високо ниво?