Обектно ориентирано програмиране
Обектно-ориентираният компонент на езика C++ е много мощен. Езикът C++ има разработен апарат от класове, който ви позволява да внедрявате дефинирани от потребителя типове данни. Претоварването на вградени оператори за дефинирани от потребителя типове позволява тези типове да бъдат надарени с всички функции, които езикът предоставя за вградени типове. Това дава основание да се счита вградената система от типове на C++ за разширяема.
C++ класът е обобщение на структурите на C. Класът се различава от структурите на C в две отношения. Първо, класът комбинира не само данни, но и функции. Второ, на членовете на класа се предоставят права за достъп. Комбинирането на данни и функции ви позволява да асоциирате данни и тези операции, които трябва да бъдат извършени върху тях Правата за достъп ви позволяват да капсулирате (скриете) изпълнението на класа.
В C++ дефинираните от потребителя типове могат да бъдат надарени със свойствата на наследяване и полиморфизъм. Това позволява на програмиста да разработва йерархични софтуерни системи.
Важното е, че има стандарт, одобрен през 1998 г., който определя синтаксиса на езика C++ и неговата стандартна библиотека.
Имайте предвид, че в обектно-ориентираното програмиране фокусът е върху данните, а не върху алгоритмите, както е в процедурното програмиране.
Генерично програмиране
Генеричното програмиране се основава на използването на така наречените шаблони на функции и шаблони на класове. Използването на такива шаблони се дължи на факта, че алгоритмите за обработка на данни често са слабо зависими от вида на данните, които обработват. Информацията за вида на данните, които трябва да бъдат обработени, в този случай се предава удобно чрез параметри, които се наричат генерични типове. Да донесемпример за шаблон на функция, предназначен да обменя стойностите на две променливи.
swap void шаблон (T &a, T &b) < Ttemp = a; a = b; b=temp; >int main()
В извикващата функция, която
По пътя към обектно-ориентираното програмиране
Добре известно е, че сложността на програмирането се дължи преди всичко на сложността на задачите, които се решават. Основният начин за преодоляване на тези трудности е декомпозицията на проблема. Декомпозицията се състои в замяна на първоначалния проблем с набор от други по-малко сложни проблеми, съвместното решение на които трябва да даде очаквания резултат.
Трябва да се има предвид, че не всяко разлагане води до успех. На практика често се налага да се справяте със ситуация, при която части от програмата, отговорни за решаването на отделни подзадачи, работят, но цялата програма като цяло не работи. Това се случва, когато има силни връзки между отделните части на програмата.
Използването на абстракция дава възможност да се направи решението на отделни проблеми относително независимо. Всъщност абстракцията е свързана с избора на съществени характеристики в определено явление, събитие или обект. Това в крайна сметка трябва да помогне за намаляване на взаимозависимостта между отделните компоненти на програмата.
В ранните езици за програмиране се използва така наречената абстракция на действие или процедурна абстракция. Абстракцията на действие се реализира с помощта на подпрограми (функции на езика C).
Има два основни вида абстракции:
Абстракция на действието (процесуална абстракция).
Абстракция на обект (абстрактен тип данни).
Абстракцията на действие или процедурната абстракция се реализира на езика C++ с помощта на апарата от функции. Използвайки функции, програмистът има способността да разшири нещомного вградени операции, които се предоставят от езика.
Когато използвате процедурно програмиране, това е единственият поддържан начин за абстрахиране. Помислете за факторите, които гарантират, че езикът поддържа абстракция на действие:
наличието на специална синтактична конструкция, предназначена да реализира абстракция (дефиниция на функция).
възможност за отделяне на интерфейса от изпълнението.
скриване на изпълнението на алгоритъма, който изпълнява действието от клиента.
Абстракцията на обекти е тясно свързана с проблема за създаване на потребителски типове данни. Факт е, че на практика често има нужда от моделиране на концепции, които съществуват в предметната област, за която се разработва програмата. Това води до необходимостта от устройство, което ви позволява да създавате дефинирани от потребителя типове данни. Интересно е да разгледаме следния въпрос: възможно ли е или не в езика C да се реализира абстракция на обекти. От горното може да се отбележи важен факт, който може да повлияе негативно на опита за прилагане на абстракцията на действие: в езика C няма синтактична конструкция, предназначена за тази цел.
Първо, нека разгледаме много важния въпрос как можем да опишем абстракцията на обектите. За да направим това, нека се обърнем към една концепция, която често се използва в съвременното програмиране. Това е абстрактен тип данни.