Обзорни лекции по курса

Лекция 6. Класове и обекти. Структура на класа. Наследяване на класове

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

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

1. Концепции и методология на обектно-ориентираното програмиране

2.Класове. Конструктори и деструктори

3. Просто и множествено наследяване

5. Упражнения за самопроверка

1.Концепции и методология на обектно-ориентираното програмиране

класовете се използват за прилагане на основните концепции на обектно-ориентираното програмиране в C++.Припомнете си, че концепциятакласдефинира група от обекти от един и същи тип. В допълнение, всеки представител (или екземпляр) на клас се наричаобект.Всеки обект винаги има свое собствено уникалносъстояние,определено от текущите стойности на неговитечленове-данни (елементи-данни).Функционалното предназначение на класа се определя от възможни действия върху обекти на класа, които се задават от неговитефункции-членове (функции-членове или методи).Във всеки класразпределяпамет за съхраняване на данни,и задава разрешените операции за всеки обект с данни от даден тип. Обектите от този клас се създават от специална членска функция, нареченаconstructor,и се унищожават от друга специална членска функция, нареченаdestructor.Класът позволява вътрешните данни да бъдат направени недостъпни, като ги представя катопублични,частни,изащитени.Класът установява добре дефиниран интерфейс за обекти от този тип за взаимодействие с останалите , светът.Личните кодовеили данните са налични само в рамките на този обект. От друга страна,отворените кодове и данни, въпреки че са дефинирани в обект, са достъпни за всички части на програмата.Публичната частна обекта се използва само за създаване на интерфейс на обекта с останалия свят. Получените обекти могат да бъдат манипулирани ссъобщения (или заявки),които са просто извиквания къмфункции-членове. Ще използваме термина заявка, за да не бъркаме това понятие със съобщения от операционната система Windows.

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

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

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

В някои приложения, като например разработка на GUI на приложения, разработка на приложения за база данни и компютърна графика, обхватът на ООП е наистина неограничен.В допълнение, ООП техниките могат да скрият детайлите на мрежовите протоколи от ниско ниво. Поради това те се използват широко в приложения за програмиране, които работят в мрежи (както локални, така и глобални, например в Интернет). След като бъде взето решение относно приложимостта на ООП, следващата стъпка в дизайна е да се разработят класове като градивни елементи за други типове и да се проучи как класовете могат да подчертаят онези свойства, които могат да бъдат предадени на основния клас. След това се проектират онези заявки, които ще се обменят по обекти, и се извършва изпълнението на разработените обекти и заявки.

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