Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Объектно-ориентированный подход к разработке приложений

Тип Реферат
Предмет Программирование

ID (номер) заказа
3869369

200 руб.

Просмотров
591
Размер файла
106.67 Кб
Поделиться

Ознакомительный фрагмент работы:

Введение
В настоящее время объектно-ориентированное программирование (ООП) принадлежит к числу ведущих технологий программирования. Элементы объектно-ориентированного программирования (ООП) появились в начале 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 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
138883
рейтинг
icon
3050
работ сдано
icon
1327
отзывов
avatar
Математика
Физика
История
icon
137866
рейтинг
icon
5837
работ сдано
icon
2642
отзывов
avatar
Химия
Экономика
Биология
icon
92388
рейтинг
icon
2004
работ сдано
icon
1261
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
51 854 оценки star star star star star
среднее 4.9 из 5
РГАУ-МСХА
Исполнитель ответственно подошёл к заказу, выполнил досрочно и качественно??
star star star star star
СИБИТ
Работа выполнена хорошо! Не первый раз обращаюсь , рекомендую исполнителя!!!
star star star star star
КФУ
Работа выполнена очень быстро и в соответствии со всеми критериями. Огромная благодарность.
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Создать два любых стикеры, чтоб была эмблема мгту носова

Курсовая, Информационные технологии

Срок сдачи к 30 апр.

только что

решить 3 задачи по УП

Решение задач, уголовное право

Срок сдачи к 30 апр.

1 минуту назад

Написать эссе по одной выбранной теме

Эссе, Городская инфраструктура, государственное и муниципальное управление

Срок сдачи к 10 мая

1 минуту назад

Расчетно-графическое задание

Курсовая, Молниезащита, электроника, электротехника

Срок сдачи к 13 мая

2 минуты назад

Информатика

Контрольная, Информатика

Срок сдачи к 3 мая

2 минуты назад

Решить 5 задач по химии

Решение задач, Химия

Срок сдачи к 2 мая

2 минуты назад

Элементы кристаллографии

Доклад, Геология

Срок сдачи к 1 мая

2 минуты назад

Развитие коммуникативной компетенции детей методами имаготерапии

Курсовая, Педагогика и психология

Срок сдачи к 10 мая

2 минуты назад

Тема: Активизация студентов на элективных курсах

Реферат, Физическая культура и спорт

Срок сдачи к 31 мая

2 минуты назад

Гонка вооружений и создание водородной бомбы в ссср

Эссе, история россии

Срок сдачи к 28 апр.

2 минуты назад

Доклад на 25 страниц по пунктам

Доклад, Право и организация социального обеспечения

Срок сдачи к 5 мая

3 минуты назад

нужно из данных в таблице сделать расчет по стьюденту чтобы вышло так...

Решение задач, Математическая статистика

Срок сдачи к 29 апр.

4 минуты назад

внести правки в работу

Эссе, государственное регулирование экономики

Срок сдачи к 3 мая

4 минуты назад

Решить 16 задач по физике

Решение задач, Физика

Срок сдачи к 6 мая

5 минут назад

Аккреция Земли и планет солнечной системы

Реферат, Геология

Срок сдачи к 1 мая

5 минут назад

Написать синтаксический LL(1) анализатор для данной грамматики.

Лабораторная, Специальное программное обеспечение

Срок сдачи к 29 апр.

5 минут назад

Тема дипломной работы "Модернизация системы подачи горячего воздуха в...

Диплом, Дипломная работа, теплотехника

Срок сдачи к 20 июня

6 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.