это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
ID (номер) заказа
3869369
Ознакомительный фрагмент работы:
Введение
В настоящее время объектно-ориентированное программирование (ООП) принадлежит к числу ведущих технологий программирования. Элементы объектно-ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Симула, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования.Основная цель ООП, как и большинства других подходов к программированию – повышение эффективности разработки программ. Объектно–ориентированные языки программирования позволяют использовать преимущества ООП не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения. Языков, поддерживающих концепцию ООП, много: C++, C#, Java, Python другие.Основными принципами ООП являются инкапсуляция, наследование, полиморфизм. Суть принципов инкапсуляции (сокрытия данных) и наследования не так сложна для понимания, как в теории, так и на практике. С полиморфизмом – принципом многообразия для одинаково называющихся сущностей – дело обстоит иначе: не всегда очевидно, в чем этот принцип должен проявляться при разработке и следует ли к нему прибегать.В данной работе рассматривается общая концепция объектно-ориентированного программирования, а так же более подробное внимание уделяется полиморфизму. На практических примерах (с использованием языка C++) демонстрируются различные способы применения этого прицнипа.1 Объектно-ориентированный подход к разработке приложенийИсторически сложилось так, что программирование возникло и развивалось как процедурное программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование – это методика разработки программ, в основе которой лежит понятие объекта как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с использованием методики объектно-ориентированного программирования, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними.Другими словами, объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает человеческое поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.Двумя основными понятиями ООП являются «класс» и «объект».Класс – это абстрактное понятие, сравнимое с понятием «категория» в его обычном смысле. По определенным свойствам любого элемента определенной категории можно установить, что он принадлежит к этой категории. Сама категория определяется общими свойствами, которые имеют все экземпляры этой категории. На практике класс представляет некий абстрактный тип данных, который включает данные (поля класса), но и функции и процедуры. Функции и процедуры класса называются методами и содержат исходный код, предназначенный для обработки внутренних данных объекта данного класса. Объект – это конкретный экземпляр уже описанного класса. Объект может быть охарактеризован структурой, его состоянием, поведением и индивидуальностью. Состояние объекта определяется перечнем всех возможных (обычно статических) свойств и текущими значениями (обычно динамическими) каждого из этих свойств. Свойства объекта характеризуются значениями его параметров. Поведение объекта описывает, как объект воздействует на другие объекты или как он подвергается воздействию со стороны других объектов с точки зрения изменения его собственного состояния и состояния других объектов. Говорят также, что поведение объекта определяется его действиями. Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называют операцией. В объектно-ориентированных языках программирования операции называют методами.Можно выделить несколько видов операций:конструктор, создание и инициализация объекта;деструктор, разрушающий объект;модификатор, изменяющий состояние объекта;селектор для доступа к переменным объекта без их изменения;итератор для доступа к содержанию объекта по частям в определенной последовательности.Известна и другая классификация методов объекта, когда выделяют функции управления, реализации, доступа и вспомогательные функции.Отношение понятий «класс» и «объект» можно продемонстрировать в виде схемы, приведенной на рисунке 1.Рисунок 1 – Классы и объекты в объектно-ориентированном подходеОсновными принципами, на которых базируется концепция объектно-ориентированного программирования являются инкапсуляция, наследование и полиморфизм. Инкапсуляция. Во многих языках этот термин обозначает сокрытие данных, то есть невозможность напрямую получить доступ к внутренней структуре объекта, так как это небезопасно. Второй смысл инкапсуляции – объединение свойств и поведения в единое целое, т. е. в класс. Инкапсуляция в этом смысле подразумевается самим определением объектно-ориентированного программирования и есть во всех объектно-ориентированных языках.Наследование – определение класса и его дальнейшее использование для построения иерархии дочерних классов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих классов. Дочерние классы наследуют особенности родительских, однако дополняют или в определенной степени модифицируют их характеристики.Полиморфизм – присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим. Например, для чисел есть операция сложения, обозначаемая знаком +. Однако мы можем определить класс, объекты которого также будут поддерживать операцию, обозначаемую этим знаком. Но это вовсе не значит, что объекты должны быть числами, и будет получаться какая-то сумма. Операция + для объектов нашего класса может значить что-то иное. Но интерфейс, в данном случае это знак +, у чисел и нашего класса будет одинаков. Полиморфность же проявляется во внутренней реализации и результате операции.Одним из первых действий, предпринимаемых человеком при попытке понять окружающий мир, является применение к нему некоторой структурной формы. При встрече с неизвестным объектом мы пытаемся втиснуть его в нашу существующую структуру: другими словами, классифицировать его. Большинство людей знакомо по крайней мере с несколькими классификационными структурами или иерархиями.Использование иерархии классов вводит необходимость абстракции. Классы становятся более абстрактными по мере продвижения вверх по иерархии. Объектно-ориентированные языки используют такой же подход. Иерархии обычно начинаются с нескольких абстрактных классов. Каждый новый класс представляется как подкласс существующего класса (называемого его суперклассом). Он наследует данные и методы от классов, стоящих выше в иерархии. Только те данные и методы, которые являются новыми для этого класса, следует определить и реализовать.Если наш код и данные являются разделенными элементами, то всегда существует опасность вызова правильной процедуры с неверными данными или ошибочной процедуры с правильными данными. Забота о совпадении этих элементов возлагается на программиста. Объект осуществляет синхронизацию кода и данных путем совместного построения их описаний. Реально, чтобы получить значение одного из полей объекта, мы вызываем относящийся к этому объекту метод, который возвращает значение нужного поля. Чтобы присвоить полю значение, мы вызываем метод, который назначает данному полю новое значение.Далее рассмотрим несколько практических примеров, на которых постараемся наглядно продемонстрировать проявление одного из принципов ООП – полиморфизма.2 Полиморфизм на практикеПолиморфизм – один из основных приемов создания гибкой архитектуры приложений. Он обеспечивает повторное использование и расширяемость существующей кодовой базы. В C++ полиморфизм реализуется несколькими способами. Рассмотрим следующие основные возможности применения полиморфизма:1. Перегрузка функций;2. Виртуальные методы базовых классов;3. Перегрузка операторов в классах.2.1 Перегрузка функцийC++ позволяет определять несколько функций с одинаковым именем в одном пространстве имён. Такие функции называются перегруженными и компилятор различает их по спискам параметров. Перегрузка позволяет использовать универсальные имена для выполнения однотипных действий.Функции могут быть перегружены следующими способами:Количество параметров может быть разным;Тип данных параметров может быть разным;Последовательность параметров может быть разной.В классическом Си поддержка полиморфизма ограничена, например, функция взятия модуля числа имеет разные названия в зависимости от типа своего аргумента – abs, fabs или labs. В C++ для совместимости эти имена сохранены, но можно и не помнить 3 различных названия функций, а пользоваться полиморфной функцией abs. Компилятор сам выберет, какая конкретная версия функции выполняется:int n = abs(-3);double m = abs(-4.5); //ошибочный результат 4 в C, корректный 4.5 в C++Рассмотрим пример с перегрузкой пользовательских функций. Реализуем два варианта функции суммирования значений: с двумя аргументами и тремя аргументами. Вызывая функции с соответствующим количеством параметров, будем получать результат сложения двух или трех чисел://сложение двух чиселdouble sum(double a, double b){ return a + b;}//сложение трех чиселdouble sum(double a, double b, double c){ return a + b + c;}int main(){ double a = 3, b = 4, c = 4.5; cout << "a = " << a << "; b = " << b << "; c = " << c << endl; cout << "a + b = " << sum(a, b) << endl; //перегрузка для двух чисел cout << "b + c = " << sum(b, c) << endl; //перегрузка для двух чисел cout << "a + b + c = " << sum(a, b, c) << endl; //перегрузка для трех функций return 0;}Результат работы программы (вызова перегруженных функций представлен на рисунке 2).Рисунок 2 – Результат работы программы с перегрузкой функцийТаким образом, перегрузка функций предоставляет несколько "взглядов" на одну и ту же функцию внутри программы. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.2.2 Виртуальные методыВиртуальные методы предполагают, что в базовых классах иерархии определяются методы с ключевым словом virtual. Данные методы будут переопределяться в производных классах. То есть производные классы предоставляют свои собственные определения и реализацию некоего стандартного для всей иерархии классов действия. Во время выполнения, когда клиент вызывает виртуальный метод, выполняется поиск типа объекта и вызывается перезапись виртуального метода.Наиболее простым, но наглядным примером будет иерархия геометрических фигур. Пусть имеется абстрактный класс Фигура. В нем определены виртуальные методы для вычисления площади и периметра. От Фигуры наследуется два класса-фигур: Окружность и Квадрат. Каждый из них должен вычислять площадь и периметр, но делать это нужно по-разному. Поэтому в каждом из классов будет применяться своя реализация данных методов. Ниже представлен код, реализующий данный пример. На рисунке 3 изображен результат работы программы – срабатывают те реализации методов, которые ожидаются от каждой из фигур.//базовый класс иерархии - Фигураclass Figure{public: virtual double area() = 0; //виртуальный метод вычисления площади virtual double perimeter() = 0; //виртуальный метод вычисления периметра};//круг наследуется от Фигурыclass Circle : public Figure{private: double r; //радиусpublic: Circle(double r) { this->r = r; } //реализация метода вычисления площади double area() { return 3.1415 * r * r; } //реализация метода вычисления периметра double perimeter() { return 2 * 3.1415 * r; }};//квадрат наследуется от Фигурыclass Square : public Figure{private: double a; //длина стороныpublic: Square(double a) { this->a = a; } //реализация метода вычисления площади double area() { return a * a; } //реализация метода вычисления периметра double perimeter() { return a * 4; }};int main(){ Figure* circle = new Circle(3.5); //окружность с радиусом 3.5 cout << "S circle = " << circle->area() << endl; cout << "P circle = " << circle->perimeter() << endl; Figure* square = new Square(5); //квадрат со стороной 5 cout << "\nS square = " << square->area() << endl; cout << "P circle = " << square->perimeter() << endl; return 0;}Рисунок 3 – Результат работы виртуальных функцийСтоит отметить, обработка и выполнение вызова виртуального метода занимает больше времени, чем обработка и выполнение вызова обычного метода. Кроме того, компилятор также должен выделять один дополнительный указатель для каждого объекта класса, который имеет одну или несколько виртуальных функций.2.3 Перегрузка операторов в классахОператор в С++ – это некоторое действие или функция, обозначенная специальным символом. Для того чтобы распространять эти действия на новые типы данных, при этом сохраняя естественный синтаксис, в С++ была введена возможность перегрузки операторов. Перегрузка операторов – это возможность назначать новый смысл операторам при использовании их с определенным классом. Используя перегрузку операторов, можно повысить удобочитаемость ваших программ и облегчить их понимание, выражая операции класса более понятным образом. , перегрузка действует только для класса, в котором он определяется. Если программа использует оператор с неклассовыми переменными (например, переменными типа int или float), используется стандартное определение оператора.Существует несколько ограничений при перегрузке операторов. По крайней мере один из операндов перегруженного оператора должен быть пользовательского типа данных. Это означает, что нельзя перегрузить operator+() для выполнения операции сложения значения типа int со значением типа double. Однако можно перегрузить operator+() для выполнения операции сложения значения типа int с объектом своего разработанного класса.Кроме того, изначальное количество операндов, поддерживаемых оператором, изменить невозможно. Т.е. с бинарным оператором используются только два операнда, с унарным – только один, с тернарным – только три.В качестве примера приведем перегрузку оператора сложения для класса денежных сумм. Пусть денежная сумма представлена двумя полями – рубли и копейки. В результате выполнения сложения двух сумм через оператор + будем получать новый объект, представляющий денежную сумму, являющейся результатом сложения.class Money{private: int rub; int kop;public: Money(int rub, int kop) { this->rub = rub; this->kop = kop; }; Money operator+(Money &other) { int sum_rub = this->rub + other.rub; int sum_kop = this->kop + other.kop; if (sum_kop > 100) { sum_rub += 1; sum_kop -= 100; } return Money(sum_rub, sum_kop); } //вывести сумму void print() { cout << rub << " RUB " << kop << " kop\n"; };};int main(){ Money m1(10, 50); Money m2(35, 80); m1.print(); cout << " +\n"; m2.print(); Money m3 = m1 + m2; cout << " =\n"; m3.print(); return 0;}Результат работы перегруженного оператора представлен на рисунке 4.Рисунок 4 – Результат работы перегрузки операторовВозможность перегрузки операторов гораздо шире приведенного примера. Мы можем перегрузить оператор + для соединения объектов собственного класса строки. Можно перегрузить оператор вывода << для вывода объектов класса на экран (или записи в файл). Есть возможность перегрузить оператор равенства (==) для сравнения двух объектов класса и так далее. Подобные применения делают перегрузку операторов одной из самых полезных особенностей языка C++, так как это упрощает процесс работы с классами и открывает новые возможности.
Заключение
В данном реферате мы рассмотрели основные концепции объектно-ориентированного подхода при разработке приложений. Наиболее подробно был рассмотрен один из основополагающих принципов ООП – полиморфизм. Были рассмотрены практические примеры с различными возможностями реализации полиморфизма на языке C++.
Список использованной литературы
Айра Пол. Объектно-ориентированное программирование на C++: учебное пособие / Айра Пол - М.: Бином, 2011 – 464 с.Эккель Брюс. Философия С++ .Введение в стандартный С++: учебное пособие / Эккель Брюс: Питер, С.-Петербург, 2014 – 572 с.Р. Лафоре. Объектно-ориентированное программирование в C++: учебное пособие / Р. Лафоре.: Питер, С.-Петербург, 2009 – 928 с.Б. Карпов, Т. Баранова. Специальный справочник С++ / Б. Карпов, Т. Баранова: Питер, С.-Петербург, 2015 – 241 с.Попов И. И., Партыка Т. Л. Языки программирования: Учебное пособие. – М.: ФОРУМ: ИНФРА-М, 2008. – 338 c.Голицина О. Л., Попов И. И. Основы алгоритмизации и программирования: Учебное пособие. – М.: ФОРУМ: ИНФРА-М, 2013 – 442 c.
Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.
Цены ниже, чем в агентствах и у конкурентов
Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит
Бесплатные доработки и консультации
Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки
Гарантируем возврат
Если работа вас не устроит – мы вернем 100% суммы заказа
Техподдержка 7 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Создать два любых стикеры, чтоб была эмблема мгту носова
Курсовая, Информационные технологии
Срок сдачи к 30 апр.
Выполнить задание по Информационные технологии в профессиональной деятельности. М-01493
Контрольная, Информатика
Срок сдачи к 30 апр.
Написать эссе по одной выбранной теме
Эссе, Городская инфраструктура, государственное и муниципальное управление
Срок сдачи к 10 мая
Расчетно-графическое задание
Курсовая, Молниезащита, электроника, электротехника
Срок сдачи к 13 мая
Развитие коммуникативной компетенции детей методами имаготерапии
Курсовая, Педагогика и психология
Срок сдачи к 10 мая
Тема: Активизация студентов на элективных курсах
Реферат, Физическая культура и спорт
Срок сдачи к 31 мая
Доклад на 25 страниц по пунктам
Доклад, Право и организация социального обеспечения
Срок сдачи к 5 мая
нужно из данных в таблице сделать расчет по стьюденту чтобы вышло так...
Решение задач, Математическая статистика
Срок сдачи к 29 апр.
Написать синтаксический LL(1) анализатор для данной грамматики.
Лабораторная, Специальное программное обеспечение
Срок сдачи к 29 апр.
Тема дипломной работы "Модернизация системы подачи горячего воздуха в...
Диплом, Дипломная работа, теплотехника
Срок сдачи к 20 июня
Заполните форму и узнайте цену на индивидуальную работу!