Обектно-ориентирано програмиране на базата на езика С++
Анотация
През изминалите двайсет години обектно-ориентираното програмиране стана изключително популярно. Програмистите на компилатори и други софтуерни продукти се активираха да реализират обектно-ориентирани версии на техните продукти. Бяха издадени голям брой книги и научни публикации на тази тема. Какво е обектно-ориентираното програмиране и защо стана толкова актуално?
Обектно-ориентираното програмиране е сравнително нова програмистка парадигма. Други такива са: императивно-програмната (реализирана в езиците C и Pascal), функционално-програмната (реализирана в езиците FP, Lisp, Haskell, ML), логическо-програмната (реализирана в езика Prolog). Ще отбележим, че под парадигма разбираме разширената от Thomas Kuhn в книгата му The Structure of Scientifi c Revolutions дефиниция, добавяща към стандартната интерпретация и смисъла на множество от теории, стандарти и методи, които заедно представят начин за организация на знания, т.е. начин за представяне на света. Обектно-ориентираната парадигма принуждава да преразгледаме мисленето си за програмирането, за смисъла на изпълнение на програмата, за това как информацията да бъде структурирана в компютъра. Докато процедурното програмиране е концентрирано върху функциите, обектно-ориентираното програмиране е съсредоточено върху обектите, които капсулират състояние (стойности на данните) и поведение (операции над данните, реализирани чрез функции). Тази дефиниция оприличава обектите на променливи величини от абстрактни типове данни. Възможността за дефиниране на класове позволява: да се създават типове данни, които липсват в езика за обектно-ориентирано програмиране; да се създават специфични приложения; да се обработват специфични типове данни. Средствата за дефиниране на производни класове и наследяването са сред най-важните характеристики на обектно-ориентираното програмиране. Като се използва механизмът на наследяване от съществуващ клас може да се създаде нов клас, може да се създават типове данни, чрез които да се подобрят съществуващи типове данни. Полиморфизмът е важна характеристика на обектно-ориентираното програмиране. Изразява се в това, че едни и същи действия (в общия смисъл) се реализират по различен начин в зависимост от обектите, върху които се прилагат, т.е. действията са полиморфни (с много форми).
В тази книга ще се опитаме чрез средствата на езика C++ да покажем, че обектно-ориентираното програмиране не е просто добавяне на няколко нови черти към традиционното императивно програмиране. То е нов начин на мислене относно процеса на декомпозиране на проблемите и развиването на програмните решения. Нарастването на популярността му се дължи главно на надеждата, че тази нова парадигма ще доведе до нарастване на продуктивността, ще подобри сигурността, ще направи програмите по-лесно модифицируеми. Терминът абстрактен тип данни е много важен в компютърната наука, особено в обектно-ориентираното програмиране. Абстрактните типове данни се създават от програмистите и най-често са съставени от един или повече примитивни типове данни. В основата на създаването им стои подходът абстракция с данни. Описание на подхода абстракция с данни, както и на процеса на създаване на абстрактни типове данни е направено в Глава 1 на книгата. Абстрактните типове данни са пример, мотивиращ създаването на средства за реализиране на пакетиране на данните и операциите в едно цяло и информационно скриване на данни. Такива средства предоставят класовете. В Глава 2 на книгата е описано дефинирането на класове и обекти, както и основните компоненти на класовете: конструктори, деструктор, оператор за присвояване, член-функции за достъп, операторни функции и начините за предефинирането им в C++, статични компоненти. Необходимостта от дефиниране на деструкторите е мотивирано с въвеждане на динамични обекти. Важна и полезна конструкция в езика C++ са шаблоните на функции и класове, дефинирането и използването, на които е определено в тази глава. Наследяването и полиморфизмът са сред най-важните възможности на обектно-ориентираните езици за програмиране. В книгата те са представени в трета и четвърта глава. Разглеждането им е структурирано по следния начин: дефиниране на производни класове; основни елементи на единичното и множественото наследяване; дефиниране и използване на виртуални класове; статично и динамично свързване; виртуални функции; полиморфизъм; виртуални деструктори; абстрактни класове.
В Глава 5 на книгата е предложено описание на възможностите на потоците, входно/изходните операции и работата с файлове. Изложението се базира на специализацията на стандартната потокова C++ библиотека за типа char. Книгата е замислена като основен курс по обектно-програмиране на базата на езика C++. Материалът, включен в нея, е богато илюстриран с примери. Те са оформени като цялостни програми с цел изграждане на умения за съставяне на цялостен изпълним код.