KNOU INTUIT, Лекция, Съвременни технологии за обектно-ориентиран анализ и проектиране
Компютърните и информационните технологии без преувеличение могат да се нарекат най-динамичната област на съвременното познание, която концентрира най-новите постижения в областта на науката и технологиите. Появата на нови модели процесори и компоненти, версии на операционни системи и софтуер се случва на фона на постоянно усложняване не само на отделните физически и софтуерни компоненти, но и на концепциите, които ги основават. Развитието и усъвършенстването на информационните системи води до необходимостта от поддържане на единен стил за различните версии на програмите с тяхното постоянно усъвършенстване и модифициране.
Трудоемкостта на създаването на съвременни приложения в началните етапи на проекта, като правило, се оценява като значително по-ниска от реално изразходваните усилия, което води до непланирани разходи и забавяне на крайните срокове на готовност на програмата. В процеса на разработване на приложения функционалните изисквания на клиента се променят, което допълнително забавя момента, в който програмистите приключат работата си. Увеличаването на размера на програмите налага включването на извънщатни програмисти, което от своя страна изисква допълнителни ресурси за организиране на координираната им работа. В разработването и внедряването на съвременни корпоративни информационни системи участват много специалисти с различни квалификации, за които еднаквото разбиране на архитектурата и функционалността е сериозен проблем.
По този начин всички тези характеристики водят до спешната необходимост от моделиране на структурата и процеса на функциониране на софтуерните системи преди написването на съответния код. В същото време, задължително условие за успешното завършванепроектът се превръща в изграждането на предварителен модел на софтуерната система.
Модел (модел) - абстракция на физическа система, разгледана от определена гледна точка и представена на някакъв език или в графична форма.
От гледна точка на общите принципи на системния анализ, една и съща физическа система може да бъде представена чрез няколко модела. В този случай целта на отделен модел на системата се определя от естеството на проблема, който се решава. Основното изискване към модела на софтуерната система е той да бъде разбираем за клиента и всички специалисти от проектния екип, включително бизнес анализатори и програмисти. Именно за разработването на такава нотация бяха необходими усилията на група специалисти от водещи производители на софтуер и хардуер, което доведе до появата на езика UML.
Разработването и използването на UML езикови модели се извършва в рамките на общата концепция за обектно-ориентиран анализ и дизайн, което от своя страна е обобщение на методологията на обектно-ориентираното програмиране.
Методология на обектно-ориентираното програмиране
Методологията на обектно-ориентираното програмиране дойде да замени процедурната или алгоритмичната организация на структурата на програмния код, когато стана очевидно, че традиционните методи на процедурно програмиране не могат да се справят нито с нарастващата сложност на програмите и тяхното развитие, нито с повишаването на тяхната надеждност. През втората половина на 80-те години имаше спешна нужда от нова методология за програмиране, която да позволи решаването на цялата тази гама от проблеми. Тази методология се превърна в обектно-ориентирано програмиране (ООП).
Обектно-ориентирано програмиране (OOP, Object-Oriented Programming) – комплпринципи, технологии, както и инструменти за създаване на софтуерни системи, базирани на архитектурата за взаимодействие на обекти.
Разпространението на ООП методологията е свързано с процеса на разработка на софтуер. По-специално, процедурно-ориентираната декомпозиция на програмите отстъпи място на обектно-ориентирана, при която не процедурите и функциите се разглеждат като отделни структурни единици на програмата, а класове и обекти със съответните свойства и методи. В резултат на това програмата престана да бъде последователност от действия, предварително определени на етапа на кодиране, а се трансформира в управлявана от събития. Последното обстоятелство доминира и при разработването на широк спектър от съвременни приложения. В този случай всяка програма е безкраен цикъл на чакане на предварително дефинирани събития. Събитията могат да бъдат инициирани от други програми или потребители, като при възникване на едно събитие програмата излиза от състоянието на изчакване и реагира на него по напълно адекватен начин.
Основни принципи на ООП: абстракция, наследяване, капсулиране и полиморфизъм.
Абстракцията е характеристика на даден обект, който го отличава от другите обекти. Абстракцията дефинира граница на представяне на съответния моделен елемент и се използва за дефиниране на фундаментални ООП концепции като клас и обект.
Класът е абстракция на колекция от реални обекти, които споделят общ набор от свойства и показват едно и също поведение. Обект в контекста на ООП се третира като екземпляр на съответния клас.
Обекти, които нямат идентични свойства или нямат същото поведение, по дефиниция не могат да бъдат присвоени към един и същи клас.
Наследяването е тясно свързано с йерархиятакласове, което определя кои класове трябва да се считат за най-абстрактни и общи по отношение на други класове. Освен това, ако общият или родителският клас (предшественик) има фиксиран набор от свойства и поведение, тогава класът, получен от него (дете), трябва да съдържа същия набор от свойства и подобно поведение, както и допълнителни, които ще характеризират уникалността на получения клас. В този случай се казва, че производният клас наследява свойствата и поведението на родителския клас.
За да илюстрираме принципа на наследяването, може да се даде следният пример. Общ клас "Компютър". Дефинира се като абстракция на свойствата и поведението на всички електронни компютри в реалния живот. В същото време общите свойства на класа "Компютър" могат да бъдат такива като наличието на процесор, RAM, входни и изходни устройства. Ако разглеждаме класа "Персонален компютър" като производен, тогава всички свойства, подчертани по-горе, също ще съдържат този клас. Можем да кажем, че класът "Персонален компютър" наследява свойствата на родителския клас "Компютър". Въпреки това, в допълнение към изброените свойства, класът потомък ще има допълнителни, например наличието на системен модул и дънна платка с гнездо за инсталиране на микропроцесор.
От своя страна, класът "Персонален компютър" може да бъде класът предшественик за други класове, по-специално "Работна станция", "Сървър" и "Лаптоп". От тази гледна точка, всички тези класове наследяват свойствата на родителския клас "Personal Computer" и евентуално заместват някои от тях. Горната текстова информация за връзката на класовете в този пример има един сериозен недостатък, а именно липсата на видимост. В тази връзка възниква въпросът: възможно ли евъзможно ли е да се представи йерархията на наследяването на класовете във визуална форма? В концептуалната логика кръговете или правоъгълниците се използват за изобразяване на концепции. Използвайки тази графична нотация, йерархията на класовете за този пример може да бъде представена като вложени правоъгълници или кръгове, всеки от които съответства на отделен клас (фиг. 1.1).

Такова изображение има сериозен недостатък. От представената фигура не става ясно дали тя изобразява йерархия от понятия или декомпозиция на класа „Компютър“ на неговите съставни части. Както ще бъде показано по-долу, използването на UML нотация елиминира тази несигурност чрез въвеждане на две различни връзки под внимание: обобщение и агрегиране (лекция 6).
Следващият принцип на ООП е капсулирането. Капсулирането характеризира скриването на отделни детайли от вътрешната структура на класовете от обекти или потребители, външни за него.
Използвайки компютърния клас като пример, лесно е да илюстрираме капсулирането, както следва. Основният субект, който взаимодейства с обектите от този клас, е потребителят. Съвсем очевидно е, че не всеки потребител знае перфектно вътрешната структура на конкретен компютър. В допълнение, отделни части на това устройство са умишлено скрити в тялото на системния модул или монитора. А в случай на неизправност на компютъра, която е причина за неадекватното му поведение, необходимите ремонти се извършват от професионален специалист.
Полиморфизмът също е един от основните принципи на ООП. Под полиморфизъм (гръцки Poly - много, morphos - форма) се разбира свойството на обектите да приемат различни външни форми в зависимост от обстоятелствата. Когато се прилага към ООП, полиморфизмът означава, че действиятаизпълнявани от методи със същото име, могат да се различават в зависимост от това към кой от класовете принадлежи този или онзи метод.
Например три обекта от съответните класове: автомобилен двигател, електрическо осветление в стая и персонален компютър. За всеки от тях можете да дефинирате turn off() операция. Резултатът от тази операция обаче ще бъде различен за всеки от разглежданите обекти. Така че за автомобилен двигател извършването на операция shutdown() означава прекъсване на подаването на гориво и спирането му. Извършването на операция за изключване() на електрическо осветление в стая означава просто натискане на превключвател, след което стаята се потапя в тъмнина. В последния случай, за персонален компютър, извършването на операция shutdown() може да причини загуба на данни, ако се извърши по ad hoc начин.
Полиморфизмът в обектно-ориентираните езици е свързан, но не е идентичен с претоварването на функциите. Важно е да се има предвид, че имената на методите и свойствата са тясно свързани с класовете, в които са описани. Това обстоятелство осигурява известна надеждност на програмата, тъй като изключва случайното прилагане на метода за решаване на необичаен за него проблем.
Най-важното обстоятелство при разработването на ООП методологията беше осъзнаването, че процесът на писане на програмен код може да бъде отделен от процеса на проектиране на програмната структура. Преди да започнете да програмирате класове, техните свойства и методи, трябва да дефинирате самите тези класове. Освен това трябва да отговорите на следните въпроси: колко и какви класове трябва да бъдат дефинирани за решаване на проблема, какви свойства и методи са необходими, за да дадат на класовете желаното поведение, както и да установите връзки между класовете. Този набор от задачи е не самое свързано както с писане на код, така и с общ анализ на изискванията към бъдеща програма, както и с анализ на конкретната предметна област, за която се разработва програмата. Всички тези обстоятелства доведоха до появата на специална методология, наречена методология на обектно-ориентирания анализ и проектиране (OOAP).