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