Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История и развитие методологии объектно-ориентированного программирования. Сферы применения (ОСНОВНЫЕ ПОНЯТИЯ О ПРОГРАММИРОВАНИИ, ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ)

Содержание:

ВВЕДЕНИЕ

В течение нескольких последних десятилетий современные вычислительные, а также информационные технологии развивались чрезвычайно быстрыми темпами. При этом языки программирования (ЯП) также усовершенствовались значительными шагами.

Стоит отметить, что использование с каждым годом более мощных персональных компьютеров (сокращенно ПК) дало жизнь сложным и очень объемным программам, что освещали одновременно все новые проблемы в непосредственном направлении разработки ПО.

Еще в конце 1970-х гг. такие языки, как С, Pascal, помогали человечеству вступить в стадию развития так называемого структурного и императивного программирования, что нуждалось в то время в наведении в указанной области порядка.

Язык С поспособствовал и предоставил для разработчиков инструменты, что крайне необходимы для реализации так называемого структурного типа программирования, обеспечил создание быстро функционирующих и компактных программных продуктов, а также дал возможность адресации для разного рода аппаратных и технических ресурсов (к примеру, получил возможность управления накопителями).

Все такие свойства помогли ЯП под названием С в 1980-е гг.в доминировать над семи другими языками программирования.

Актуальность предоставляемой работы состоит факте невозможности применения императивных ЯП или иных подходов, которые полностью исчерпали себя в плане формирования логики программы, а современная разработка ПО при помощи ООП была и остается одной с самых популярных парадигм в нынешнее время.

Цель написания курсовой работы – рассмотрение современных ЯП объектно-ориентированного направления, а также описание их истории, приименения и направлений развития.

Исходя с поставленной цели выделяются такие задачи:

– описать основные понятия для теории ЯП;

– рассмотреть историю возникновения ООП;

  • определить основные принципы ООП;
  • описать ЯП высокого уровня, которые поддерживают ООП;
  • рассмотреть сферы применения ООП на конкретном примере.

Объект работы – теория ЯП.

Предмет работы – языки ООП.

С каждым годом развития вычислительная техника применяла более усовершенствованные ЯП, что исследовались и создавались самыми разными учеными: Динматном К.А. [6], С. Лафорте, [13], З. Дейтелстом [17].

1.ОСНОВНЫЕ ПОНЯТИЯ О ПРОГРАММИРОВАНИИ, ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

Понятие о ЯП, их становление

До недавнего времени полностью все профессиональные программисты свои программные продукты реализовывали при применении структурной или процедурной парадигмы программирования.

При перманентном увеличении объемов обрабатываемой информации, ростом многих требований разного рода пользователей непосредственно к написанию программных продуктов значительно начали возрастать объемы вспомогательных программных модулей и других составных частей разрабатываемого ПО.

Вследствие постоянной борьбы непосредственно с проблемой большой сложности процесса разработки программных кодов были созданы более новые концепции проектирования ПО, а именно следующие:

– объектно-ориентированное программирование (ООП);

– унифицированный язык UML;

– специализированные средства по разработке современного ПО.

Стоит отметить, что в некоторых программистов часто возникает логический вопрос: почему ООП начало быть приоритетным при разработке большинства программы и другими языками программирования?

Заметим, что ООП также имеет возможность предложить совершенно новый мощный механизм для решения проблем, которые появляются при создании сложных программ.

Вместо рассмотрения программы в качестве какого-то набора последовательно реализуемых установок, для ООП программный код продукта представляется как совокупность некоторых основных объектов, имеющих сходные свойства, разные наборы соответствующих действий.

Унифицированный язык, который предназначается для моделирования логики выполнения программы (UML) – это не что иное, чем графическое представление имеющегося алгоритма при применении ООП (рисунок 1).

Результат пошуку зображень за запитом "uml диаграмма"

Рисунок 1 – Образец UML-диаграммы

По классическому определению, UML считается графическим языком, что содержит множество диаграмм, что помогаю специалистам создавать даже самые сложные алгоритмы в сфере системного анализа, а разработчикам – легко выяснять принципы написания кода.

UML является мощнейшим инструментом, что дает возможность сделать программирование еще более эффективным, легким.

Стоит отметить, что каждое новое средство при реализации главных элементов диаграмм UML излагаются именно в том месте, где оно становится полезным для использования принципов ООП. [18]

К примеру, применение диаграммы классов на языке UML может изучаться одновременно с таким понятием, как взаимодействия различных классов.

Рассмотрим этапы развития языков программирования.

Этап 1. 60-е гг. 20 века – расцвет ЯП высокого уровня.

60-е годы 20 века ознаменованы бурным развитием ЯП высокого уровня [5]:

– Кобол;

– Фортран;

– Алгол.

Simula – это первый в мире язык программирования, который поддерживал парадигму ООП.

Однако, надежда на решение с помощью указанных ЯП всех проблем разработки больших программ, к сожалению, не оправдалась.

Все дело в том, что при повышении мощности компьютеров и непосредственного накопления опыта программирования в языках высокого уровня намного быстрыми темпами начала расти сложность задач, подлежащих решению на ПК.

В результате этого обнаружилась очень серьёзная ограниченность ЯП.

Этап 2. 1970-е гг. – зарождение технологии программирования.

В начале 1970-х было создано три языка, роль которых в современном развитии программирования переоценить очень тяжело:

– Паскаль;

– С;

– SmallTalk.

Эта великая тройка ЯП дала путёвку в жизнь таким важнейшим направлениям: [19]

– структурному (Паскаль);

– системному (C);

– ООП (Smalltalk).

Она также определила и различные языковые ветви, которые имеют непохожий синтаксис и существенно отличающейся культурой применения языка программирования.

Зародилась и стала развиваться интенсивно технология программирования: при этом обоснование и широкое распространение нисходящей разработки и структурного программирования, усовершенствование типов данных, а также модульного программирования, исследование разных проблем обеспечения надёжности, мобильности программ, разработка методики управления, появление средств поддержки средств программирования.

Этап 3. 1980-е годы – использование персональных компьютеров.

Были разработаны такие ЯП:

– Basic;

– Objective-C;

– С++ и другие.

С появлением ОС DOS программисты стали перед сложным выбором между неэффективным, но продуктивным Basic и эффективным, но непродуктивным ассемблером.

При этом начался бум микрокомпьютеров, трансляторы для распространённых ЯП (Паскаля, С, Бейсика) оперативно были оптимизированы под слабые системы.

Этап 4.1990-е гг. – всеобщая информатизация всех направлений деятельности.

С появлением ОС Windows кризис повторился, но уже на новом уровне. А именно, приходилось выбирать между очень мощным, но требующим разных специальных знаний С++, а также простым (в основном, визуальным), но ограниченным Visual Basic.

В 1990-е годы начался по сей день продолжающийся решающий этап компьютеризации и информатизации общества.

Постоянно растущая сложность задач для информатизации поставила ребром вопросы о скорости, а также надёжности разрабатываемых программных продуктов. [17]

При этом компьютерная индустрия ответила на данный вызов развитием объектно-ориентированных инструментов программирования:

– 1994 год - Sun Microsystems выпустила ЯП Java, который использовал ООП;

– 1995 год – компания Borland выпускает революционное по тем временам объектно-ориентированное средство Delphi;

– 1997 год – ЯП PHP стал поддерживать принцип объектно-ориентированного синтаксиса.

Этап 5. 21-век – повсеместное развитие Интернет и сетевых технологий.

В 2000-х гг. сетевые технологии, а также сеть Интернет вошла прочно в обиход даже очень отдаленных от вычислительной тематики областей деятельности.

С начала развитие информационных технологий (ИТ) и их проникновение приобрело в обычную жизнь лавинообразный характер. Такое возникновение можно условно разделять на 2 направления:

– макро;

– микро.

Тенденция объединять самую различную функциональность только в одном устройстве имеет название "конвергенция". [13]

При этом, программируемой стала даже традиционная бытовая техника: стиральные, швейные машины, телевизоры, микроволновые печи, холодильники.

Так что пользователями ПК стали даже домохозяйки, что зачастую даже и не догадывались об этом.

Непосредственное производство встраиваемых систем со временем потребовало развития ЯП и для программирования систем наряду с использованием кроссплатформенных компиляторов стал использоваться интерпретируемый язык Java.

Парадигмы языков программирования

Постоянно перед началом написания каждого нового типа программного продукта разработчикам было очевидно, что указанные подходы не являются полностью удачными.[11]

Рассматриваемая проблема заключалась прежде всего в непропорциональном росте показателей сложности процесса проектирования самых программных кодов в сравнении с значительным ростом программных требований к ним.

Наверняка является правильным утверждение о том, что совершенные программы часто относятся, без преувеличения, к очень сложным продуктам человеческой деятельности.

Однако, несмотря даже на уровень избыточной уровня сложности, такие программы содержать нередко ошибки, и хорошо, что они являются не значительными.

Поскольку иногда серьезные ошибки в программах потенциально вызывают большой материальный ущерб (например, ошибки в банковских расчетах), а иногда могут угрожать жизни людей.[7]

Парадигма программирования считается принципом, подходом, моделью конструирования программного проекта, реализации процесса структурирования составных частей.

При этом в нынешнем программировании различают следующие подходы:

– структурный;

– функциональный;

– шаблонный;

– процедурный;

– модульный;

– объектно-ориентированный.

К примеру, под понятием структурного программирования понимается методология проектирования ПО, что предложена еще в 70-х гг. 20 века Дейкстрой.[1]

По рассматриваемой методологии любая программа может быть представлена с помощью структуры, которая состоит из 3 базовых блоков (рисунок 2):

Результат пошуку зображень за запитом "структурное программирование"

Рисунок 2 – Составные части алгоритмов

Под понятием функционального подхода к программированию понимается глава математики, где весь описываемый процесс вычисления и преобразования кода трактуется как вычисление параметров с помощью некоторой функций.

Процедурное программирование является парадигмой программирования, которая базируется на концепции вызова одной с некоторых процедур.

Объектно-ориентированное программирование является подходом программирования, что основан непосредственно на представлении области программирования качестве системы взаимосвязанных компонентов.[14]

В результате рассмотрения первого раздела курсовой работы подробно выполнена характеристика и базовые этапы становления процесса разработки программ и понятий, что связаны с возникновением ЯП, кратно рассмотрены типы ЯП по имеющейся парадигме программирования.

2. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ МЕТОД НАПИСАНИЯ ПРОГРАММ

2.1. История развития ООП

Термины «объектно-» и «ориентированный» в современном смысле этих слов появились в MIT в конце 1950 начале 1960 годов. В среде специалистов по искусственному интеллекту термин «объект» мог относиться к идентифицированным элементам (атомы Lisp) со свойствами (атрибутами). Алан Кэй позже писал, что понимание внутреннего устройства Лиспа оказало серьезное влияние на его мышление в 1966 г. Другим ранним примером ООП в MIT был Sketchpad созданный ИваномСазерлендом в 1960-61. В глоссарии подготовленного в 1963 г. технического отчета, основанного на его диссертации о Sketchpad, Сазерленд определяет понятия «объект» и «экземпляр» с концепцией классов на основе «мастера» или «определения», хотя все эти термины относились к графическому представлению объектов.

В ранней MIT-версии ALGOL AED-0 структуры данных («плексы» на диалекте Алгола) напрямую были связаны с процедурами, которые впоследствии были названы сообщениями, методами или функциями-членами.

Объекты, как формализованный концепт появились в программировании в 1960-х в Simula 67, модернизированной версии Simula I, языка программирования, ориентированного на дискретно-событийное моделирование. Авторы Simula — Оле-Йохан Даль и Кристен Нюгорд из Норвежского компьютерного центра в Осло. Simula разрабатывалась под влиянием SIMSCRIPT и предложенной Чарльзом Хоаром концепцией записей-классов. Simula включала в себя понятие классов и экземпляров (или объектов), а также подклассов, виртуальных методов, сопрограмм и дискретно-событийное моделирование как часть собственной парадигмы программирования.

В языке использовался автоматический сборщик мусора, который был изобретен ранее для функционального языка Lisp. Simula использовалась тогда преимущественно для физического моделирования. Идеи Simula оказали серьезное влияние на более поздние языки, такие как Smalltalk, варианты Lisp (CLOS), Object Pascal, и C++.

Язык Smalltalk, который был изобретен в компании Xerox PARC Аланом Кэем (Alan Kay) и некоторыми другими учеными, фактически навязывал использование «объектов» и «сообщений» как базиса для вычислений. Создателей Smalltalk вдохновляли некоторые идеи Simula, но Smalltalk разрабатывался как полностью динамичная система, в которой классы могут создаваться и изменяться динамически, а не только статически как в Simula. Smalltalk и ООП с его помощью были представлены широкой аудитории в журнале Byte magazine в августе 1981.

В 1970-х Smalltalk Кэя сподвиг сообщество Lisp внедрить в язык объектно-ориентированные техники, которые были представлены разработчикам с помощью Lisp машины.

В 1980 было несколько попыток дизайна архитектур процессоров, которые включали бы в себя аппаратную поддержку работы с объектами в памяти, но все они были безуспешны. В качестве примеров можно привести Intel iAPX 432 и Linn Smart Rekursiv.

Объектно-ориентированное программирование развилось в доминирующую методологию программирования в начале и середине 1990 годов, когда стали широко доступны поддерживающие ее языки программирования, такие как Visual FoxPro 3.0, C++, и Delphi.

Доминирование этой системы поддерживалось ростом популярности графических интерфейсов пользователя, которые основывались на техниках ООП. Пример тесной связи между динамической библиотекой GUI и объектно-ориентированного языка программирования можно найти посмотрев на фреймворк Cocoa на Mac OS X, который был написан на Objective-C, объектно-ориентированом расширении к С, основанном на Smalltalk с поддержкой динамических сообщений.

В ETH Zürich, Никлаус Вирт и его коллеги тоже исследовали такие предметы, как абстрация данных и модульное программирование, хотя эти подходы широко использовались и в 60-х и ранее.

Modula-2 вышедшая в 1978 включала оба эти подхода, а ее последователь Oberon имел собственный подход к объктно-ориентированности, классам и прочему, непохожий на подход Smalltalk и совсем не похожий на подход C++.

Возможности ООП добавлялись во многие языки того времени, включая Ada, BASIC, Fortran, Pascal и другие. Их добавление в языки, изначально не разрабатывавшиеся для поддержки ООП часто приводило к проблемам с совместимостью и поддержкой кода.

2.2. Характеристика понятий ООП

Рассмотрим основные понятия, которые связаны с понятием ООП.

Классом называется набор специальных функций и типизированных файлов, объединенных в совершенно новый тип данных.

В отличие от структур, типизированных данных и функций имеют различные уровни реализации доступа.[2]

Переменная, которая объявлена в программе, имеющая типом данных класс, называется объектом указанного класса.

Таким образом, под классом понимается структура, состоящая с некоторых переменных (или констант) и функций, а под объектом – область памяти, что занимает структура для ее объявления.

Для создания разных объектов предусмотрены функции, которые принадлежат классу, заполняющие поля объектов. Такие функции называются конструкторами.

При удалении разного рода объектов вызываются функции, что принадлежат классу и предназначены для освобождения памяти. Они называются деструкторами.

Определению класса в классическом программировании удовлетворяет понятие структуры.

В действительности, структура языка С++ реализована как класс, поля которой общедоступны в этом смысле, так как доступ к ним выполняется через имена:

название_структуры.поле, название_структуры.функция(параметры)

или указатели типа:

указатель->функция(аргумент), указатель->поле.

Самым простым образом класс определяется с помощью такой конструкции (рисунок 3): [18]

Рисунок 3 – Принцип оглашения конструкций

Первая пара служебных слов, которые записаны в фигурных скобках, обозначает альтернативный выбор только одного с ключевых слов, а другая пара –в себя включает имена и поля функций, что принадлежат классу.

Рассматриваемые функции называют составными функциями класса.

Заключенный в приведенные фигурные скобки список программного кода называется телом класса.

Непосредственное определение тела класса всегда заканчивается точкой с запятой.

Стоит отметить, что тело составной функции является определенным вне класса.

В данном случае для указанной функции определяется имя класса, членом которой она является: [9]

формат_возвращаемого_значения название_класса::функция(параметры)

{

. . .

}

Следует заметить, что указатель на объект, для которого принадлежит составная функция, может определиться при применении ключевого слова this.

Слияние функций и данных, работающих с указаными данными, является инкапсуляцией.

Получим, что:

класс = составные функции + данные.

Помимо инкапсуляции в ООП реализован механизм наследования, что позволяет строить иерархию типов, а также полиморфизм, который позволяет объектам отвечать на разные запросы соответственно их типу. [6]

Наследование реализовывается с помощью понятия так называемого производного класса (рисунок 4).

Результат пошуку зображень за запитом "наследование ооп"

Рисунок 4 – Пример наследования

Класс считается производным от иного класса, если содержит он все функции и поля другого класса.

Если же класс не считается производным – он называется первичным.

Тело класса разбивается на несколько частей, соответствующие трем таким атрибутам: [3]

class название

{

protected:

. . .

private:

. . .

public:

. . .

}

Атрибут protected имеют те члены класса, которые доступны для дружественных и составных функций классов, что являются производными от указанного класса или же совпадают с ним. Такие члены класса называются защищенными.[16]

Атрибуты с спецификатором protected имеют такие члены класса, которые доступны для дружественных и составных функций классов, а также тех, что являются производными от указанного класса или же совпадают с ним. Стоит отметить, что такие члены класса являются защищенными.

Атрибут protected используют члены класса, которые доступны для дружественных или составных функций классов, что являются производными от указанного класса или же совпадают с ним.

Такие члены класса считаются защищенными.

Полиморфизм применяется для отделения кода программы от других его составных частей. Пример использования полиморфизма показан на рисунке 5:

Результат пошуку зображень за запитом "полиморфизм ооп"

Рисунок 5 – Пример использования полиморфизма

В общем понимании, принципом полиморфизма является идея, которая описывается словосочетанием «один интерфейс – много методов».[12]

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

Стоит заметить, что полиморфизм может использоваться и к многим операторам, например «+» применяется для сложения целых, символьных и других переменных.

В таком случае использованный компилятор определяет автоматически, именно какой тип арифметики надо и в каком случае применять. Такой формат полиморфизма называется перегрузкой операторов.

К примеру, класс «Насекомые» имеет определенную манеру поведения, что можно характеризовать как «метод перемещения». [8]

Во втором разделе работы подробно описаны некоторые понятия теории ООП, рассмотрены главные принципы применения современных ЯП, которые поддерживают указанный подход.

3.ИСПОЛЬЗОВАНИЕ ЯП С++ ДЛЯ НАПИСАНИЯ ПРОГРАММ НА ООП

3.1. Обзор языков, которые используют ООП

Язык называют объектно-ориентированным, если реализованы в нем рассмотренные выше принципы ООП.

В теории современного программирования принято различать такие категории языков программирования:

– объектные ЯП;

– объектно-ориентированные ЯП.

Последние отличаются только тем, что они никак не поддерживают принципы наследования свойств непосредственно в иерархии абстракций, к примеру, Ада является объектным языком, а C++ – объектно-ориентированным.[4]

Несмотря на это и то, что принципиально ООП можно применять на многих ЯП, желательно для создания программ с применением объектной ориентированности использовать объектно-ориентированные ЯП, включающие специальные средства, к примеру, C++, Borland Pascal, Delphi и т.п.

Самая обычная объектная модель применена при разработке программной системы Borland Pascal 7.0.

Она создавалась специально для облегчения перехода программиста на применение технологии ООП, а также не поддерживает абстракцию метаклассов, не содержит специальных инструментов сокрытия реализации объектов. [20]

В таком варианте она дает возможность создавать достаточно сложные программные системы.

Все объектные модели для остальных ЯП являются практически полными.

Отдельное место занимают в ООП объектные модели C++Builder и Delphi.

Эти модели значительно обобщают опыт ООП MS DOS, а также включают более новые средства, что обеспечиваю эффективное создание намного сложных систем.

На основании этих моделей созданы специальные визуальные среды для проектирования приложений Windows.

Основная сложность программирования под ОС Windows удалось существенно.

Авторы языка Simula очень точно угадали все перспективы развития программирования, а именно, их ЯП намного лет опередил свое время. Но современники (программисты 1960-х годов) оказались принципиально не готовы воспринимать ценности языка, и он конкуренции не выдержал с иными языками программирования.[15]

Прохладному отношению к Simula способствовало и обстоятельство, что реализовывался как интерпретируемый (не компилируемый) язык, а это было совершенно неприемлемым для 1960-х гг., так как интерпретация была связана с непосредственным снижением эффективности (то есть, скорости выполнения) ПО.

Но достоинства этого языка были замечены некоторыми опытными программистами, и в 1970-е годы разработано большое количество экспериментальных объектно-ориентированных ЯП:[10]

– Alphard;

– CLU;

– Concurrent Pascal и прочие.

Эти языки программирования так и остались быть экспериментальными, хотя в результате исследования были разработаны объектно-ориентированные языки C++, Eiffel и другие.

Самым распространенным объектно-ориентированным языком безусловно является ЯП C++.

Свободно распространяемые системы программирования на языке C++ существуют на любой платформе и для всякой операционной системы. Разработка принципиально новых объектно-ориентированных ЯП продолжается и теперь.

С 1994 года стал широко применяться новый объектно-ориентированный язык Java, ориентированный на сетевое использование компьютеров и Internet.

Синтаксис рассматриваемого языка напоминает синтаксис C++, однако такие языки имеют между собой мало общего.

Java считается интерпретируемым языком программирования, для него определены специальные внутренние представление и интерпретатор этого представления, что уже сейчас реализован на большинстве платформ.

Стоит отметить, что интерпретатор упрощает отладку программного обеспечения, написанных на ЯП Java, обеспечивает их принцип переносимости на более новые платформы, адаптируемость к новым средам применения.[5]

Он позволяет исключать влияние программ, которые написаны на языке Java, на иные программы и файлы, что используются на новой платформе, и обеспечить тем самым безопасность при реализации этих программ. Такие свойства языка Java дают возможность использовать его в качестве основного язык программирования для многих программ, распространяемых с помощью сетевых технологий.

3.2. Сферы применения ООП

Основные области применения ООП:

– разработка программ;

– создание баз данных;

– построение прикладных систем.

Опишем принципы построения программы для ООП на примере матричного калькулятора.

Напишем шаблонный класс на языке С++, реализующий матричную арифметику: сложение, вычитание, умножение, транспонирование матриц, умножение матрицы на число, умножение вектора на матрицу, вывод элементов матрицы на дисплей, проверка матриц на равенство, нахождение определителя матрицы, нахождение следа матрицы.

Разработаем и реализуем тестовое приложение с оконным интерфейсом, демонстрирующее работу с описанным классом.

С помощью среды интегрированной разработки C++ Builder создадим оконный интерфейс для приложения (рисунок 6)

Рисунок 6 – Проектирование интерфейса для программы «Матричная арифметика»

Реализация программы состоит из файла Matrix.cpp, в котором находится описание шаблонного класса и все его функций и модуля с основной программой.

Рассмотрим кратко основные части кода реализации шаблонного класса.

//Объявление шаблонного класса

template<class T>

class Matrix {

//Описание открытых полей класса

public:

//конструктор

Matrix(int n, int m) {

rows = n;

cols = m;

mtx = new T*[rows];

for(int i=0; i<rows; i++) {

mtx[i] = new T[cols];

}

}

//реализация конструктора копирования

Matrix(const Matrix<T> &m) {

rows = m.rows;

cols = m.cols;

mtx = new T*[rows];

for(int i=0; i<rows; i++) {

mtx[i] = new T[cols];

for(int j=0; j<cols; j++) {

mtx[i][j] = m.get(i,j);

}

}

}

//деструктор класса

~Matrix() {

if(mtx == NULL)

return;

for(int i=0; i<rows; i++) {

delete [] mtx[i];

}

delete [] mtx;

}

//функция для сложения матриц

Matrix<T> add(const Matrix<T> &m) {

//новая матрица

Matrix<T> res(rows, cols);

for(int i=0; i<rows; i++) {

for(int j=0; j<cols; j++) {

res.mtx[i][j] = get(i,j)+m.get(i,j);

}

}

return res;

}

//функция для вычистания матриц

Matrix<T> substract(const Matrix<T> &m) {

//новая матрица

Matrix<T> res(rows, cols);

for(int i=0; i<rows; i++) {

for(int j=0; j<cols; j++) {

res.mtx[i][j] = get(i,j)-m.get(i,j);

}

}

return res;

}

//функция для транспонирования матрицы

void transp() {

for(int i=0; i<rows; i++) {

for(int j=i; j<cols; j++) {

T tmp = mtx[i][j];

mtx[i][j] = mtx[j][i];

mtx[j][i] = tmp;

}

}

}

Остальные функции создаются аналогично.

Функционирование программы показано на рис. 6:

Рисунок 7 – Интерфейс программы

В последней главе описываются основные механизмы ООП в С++, а также разработаны на практике программы для демонстрации главных возможностей ООП.

ЗАКЛЮЧЕНИЕ

Современное объектно-ориентированное программирование многие считают одной из самых совершенных парадигм программирования, которая может рассматривать создаваемую программу в качестве совокупности связанных "объектов".

Стоит заметить, что в ней применены сразу несколько технологий программирования: от ранних, к примеру, структуры алгоритмов, до более поздних: принципы модульности, наследования, инкапсуляции.

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

Сегодня многие ЯП (а именно, такие популярные, как PHP, Java, Python, Objective-C) долгое время поддерживают указанную парадигму.

ООП уходит корнями непосредственно к разработке такого ЯП, как Симула, одновременно с значительным усилением многих споров о начале кризиса ПО.

Заметим, что при усложнении компонентов программного, а также аппаратного обеспечение, было трудно выполнять сохранение требуемого качества программ. При этом, ООП частично решило все указанные проблемы при помощи модульности. Этот принцип позволяет очень качественно осуществлять практически все часто применяемые методики разработки ПО с помощью ООП.

В процессе написания работы реализованы такие задачи:

– описаны основные понятия для теории ЯП;

– рассмотрена история возникновения ООП;

  • определены основные принципы ООП;
  • описаны ЯП высокого уровня, которые поддерживают ООП;
  • рассмотрены сферы применения ООП на конкретном примере.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Хортон А. Visual C++ 2010. Полный курс. Издательский дом «Вильямс». – 2014. – 300 с.
  2. Борис Пахомов. С/С++ и MS Visual C++ 2010 для начинающих. БХВ-Петербург. – 2014. – 436 с.
  3. Брайан Керниган, Деннис Ритчи. Язык программирования С++. Издательство «Невский диалект». – 2014. – 320 с.
  4. Бьерн Страуструп. Программирование. Принципы и практика использования С++. Издательский дом «Вильямс». – 2015. – 258 с.
  5. Джесс Либерти. Освой самостоятельно С++ за 21 день. Издательский дом «Вильямс». – 2017. – 230 с.
  6. Динман М.И. С++. Освой на примерах. – СПб.: БХВ-Петербург, 2017.– 260 с.
  7. Дэвид Гриффитс, Дон Гриффитс. Изучаем программирование на С. Издательство «Эксмо». – 2013. – 400 с.
  8. Кнут, Дональд, Эрвин. Искусство программирования. Том : Уч. пос. М.: Издательский дом. «Вильямс», 2014.– 720с.
  9. Кубенский А.А. Структуры и алгоритмы обработки данных: процедурно-ориентированный подход. – СПб.: БХВ-Петербург, 2013. – 464с.
  10. Лаптев В.В. С++. Объектно-ориентированное программирование. Задачи и упражнения. – СПб.: Питер. 2013. – 288 с.
  11. Майерс С. Эффективное использование С++. – М.: ДМК Пресс; – СПб.: Питер. 2013.–240с.
  12. Прата С. Язык программирования С++. Издание 6. Издательский дом «Вильямс» – 2016. – 304 с.
  13. Р. Лафоре. Объектно-ориентированное программирование в С++. Издательство «Питер». Издание 4. – 2014. – 628 с.
  14. С++ Стандартная библиотека. Для профессионалов./Н. Джосьютис. – СП Питер, 2017. – 350 с.
  15. Седжвик Роберт. Фундаментальные алгоритмы на С++. К.: Издательство «ДиаСофт», – 2014. – 500 с.
  16. Скляров В.А. Язык С++ и объектно-ориентированное программирование. – Минск. «Вышейшая школа». – 2017. – 478с.
  17. Харви Дейтел, Пол Дейтел. Как программировать на С++. Пер. с англ. – М.: ЗАО «Издательство БИНОМ», 2017. – 430 с.
  18. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си. Учеб. пособие. – Финансы и статистика, 2014. – 464с.
  19. Штерн Виктор. Основы С++: Методы программной инженерии.– Издательство «Лори», 2013. – 860с.
  20. Язык С++: Учеб. Пособие /И.Ф. Астахова, С.В. Власов, В.В. Фертиков, А.В. Ларин.–Мн.: Новое знание, 2013. – 203 с.