Введение 3
1 ОБЗОР ЭЛЕМЕНТОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ И ИХ СВОЙСТВ 4
1.1 Классы и объекты 4
1.2 Ассоциация 11
1.3 Наследование 12
2 ОСНОВНЫЕ ПОНЯТИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ 14
2.1 Полиморфизм 14
2.2 Инкапсуляция 15
2.3 Абстракция 16
3 РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ПРИМЕНЕНИЕМ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ 19
3.1 Паттерны проектирования 19
3.2 Фреймворки 25
ЗАКЛЮЧЕНИЕ 29
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 30
Читать дальше
Вместе с развитием объектно-ориентированного программирования стали развиваться и объектно-ориентированные методы разработки программного обеспечения, охватывающие стадии анализа и проектирования.
В работе рассматриваются труды следующих авторов: Бабаш А.В., Бабенко Л.К., Баричев С.Г., Горев А.И., Даниленко А.Ю., Жаров А.К., Железняк В.К., Зубов А.Ю., Кузьмина Т.В., Куприянов А.И., Литвинская О.С. и др.
Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования, что делает тему работы актуальной.
Объектом исследования является объектно-ориентированная парадигма программирования. Предметом исследования – объектно-ориентированные языки программирования.
Целью данной работы является введение в объектно-ориентированный подход к разработке программного обеспечения.
Для достижения поставленной цели в решаются задачи объектно-ориентированного программирования: классы и объекты, ассоциация, наследование, полиморфизм, инкапсуляция, абстракция, паттерны проектирования и фреймворки.
Методы исследования – методы и технологии проектирования информационных систем, технологии программирования.
Структурно работа состоит из введения, заключения, трех частей и списка использованных источников.
Читать дальше
ООП (Объектно-Ориентированное Программирование) стало неотъемлемой частью разработки многих современных проектов, но, не смотря на популярность, эта парадигма является далеко не единственной. Если вы уже умеете работать с другими парадигмами и хотели бы ознакомиться с оккультизмом ООП, то впереди вас ждет немного лонгрид и два мегабайта картинок и анимаций. В качестве примеров будут выступать трансформеры.
Объектно-ориентированный подход дает следующие основные преимущества:
уменьшение сложности программного обеспечения;
повышение его надежности;
обеспечение возможности модификации отдельных компонент программ без изменения остальных компонент;
обеспечение возможности повторного использования отдельных компонент программного обеспечения.
Объектно-ориентированный подход в последнее десятилетие стал одним из наиболее интенсивно развивающихся направлений в программировании и наиболее популярным средством разработки программного обеспечения [7].
Объектно-ориентированное программирование — это шаблон проектирования ПО, позволяющий решать задачи разработчика с точки зрения взаимодействия объектов. При этом большая часть объектно-ориентированных языков, например, Ruby, Python, Java, C++ наследуют на основе классов. Если говорить о JavaScript, то в нём ООП реализуется через прототипное наследование.
Наиболее удачное и популярное определение ООП звучит следующим образом — это методология программирования, которая основана на представлении программы в виде совокупности ряда объектов, причём каждый из этих объектов — это экземпляр определённого класса.
Начало развитию объектно-ориентированного подхода положил язык Simula 67, который был разработан в конце 60-х гг. в Норвегии. Несмотря на то, что язык намного опередил свое время, современники (программисты 60-х гг.) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran) [4].
Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е гг. было разработано большое число экспериментальных объектно-ориентированных языков программирования. В результате исследования этих языков были разработаны современные объектно-ориентированные языки программирования: C++, Ada, Smalltalk и др [9].
Читать дальше
Полиморфизм (polymorphism) (от греческого polymorphos) - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач.
Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных [1].
Например для языка Си, в котором полиморфизм поддерживается недостаточно, нахождение абсолютной величины числа требует трёх различных функций: abs(), labs() и fabs(). Эти функции подсчитывают и возвращают абсолютную величину целых, длинных целых и чисел с плавающей точкой соответственно. В С++ каждая из этих функций может быть названа abs().
Тип данных, который используется при вызове функции, определяет, какая конкретная версия функции действительно выполняется. В С++ можно использовать одно имя функции для множества различных действий. Это называется перегрузкой функций (function overloading) [4].
В более общем смысле, концепцией полиморфизма является идея «один интерфейс, множество методов». Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.
Преимуществом полиморфизма является то, что он помогает мнижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий.
Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор. Программисту, не нужно делать этот выбор самому. Нужно только помнить и использовать общий интерфейс. Пример из предыдущего абзаца показывает, как, имея три имени для функции определения абсолютной величины числа вместо одного, обычная задача становится более сложной, чем это действительно необходимо.
Полиморфизм может применяться также и к операторам. Фактически во всех языках программирования ограниченно применяется полиморфизм, например, в арифметических операторах.
Так, в Си, символ + используется для складывания целых, длинных целых, символьных переменных и чисел с плавающей точкой [3]. В этом случае компилятор автоматически определяет, какой тип арифметики требуется. В С++ можно применить эту концепцию и к другим, заданным типам данных. Такой тип полиморфизма называется перегрузкой операторов (operator overloading).
Читать дальше
Паттерн (от англ. Pattern) - образец, шаблон. Шаблоны не связаны с каким-либо конкретным языком программирования. Это просто подход к проектированию чего-то. Если заглянуть глубже, то многие ООП-паттерны были созданы на основе реальных жизненных ситуаций при проектировании вполне осязаемых объектов в нашем мире [5]. Именно на таких метафорах и описаниях будет построена следующая экспозиция.
1. Порождающие паттерны
Паттерны которые создают новые объекты, или позволяют получить доступ к уже существующим. То есть те шаблоны, по которым можно создать новый автомобиль и как это лучше сделать.
Singleton (одиночка)
Одна из самых известных и, возможно, самых противоречивых моделей. Представьте себе, что в городе нужно организовать общение между жителями. С одной стороны, мы можем соединить всех жителей друг с другом, протянув между ними телефонные линии, но эта система неверна.
Например, как дорого было бы добавить еще одного резидента к соединению (чтобы продлить еще одну линию для каждого резидента). Чтобы избежать этого, мы создаем телефонную станцию, которая будет нашим «одиночкой». Она всегда одна, и если кому-то нужно связаться с кем-то, они могут сделать это через эту телефонную станцию, потому что все обращаются только к ней.
Соответственно, чтобы добавить нового резидента, вам нужно будет только изменить записи на самой телефонной станции. Как только вы создадите телефонную станцию, ею сможет пользоваться каждый и только один из нее, в свою очередь, эта станция помнит все, что с ней произошло с момента ее создания и каждый может воспользоваться этой информацией, даже если он только что прибыл в город.
Registry (реестр, журнал записей)
Как следует из названия, этот шаблон предназначен для хранения записей, помещенных в него, и, соответственно, возврата этих записей (по имени), если они требуются. В примере с телефонной станцией это регистр по отношению к телефонным номерам жителей.
Multiton (пул «одиночек»)
Как следует из названия паттерна, он по существу является «реестром», содержащим несколько «одиночек», каждая из которых имеет свое собственное «имя», по которому к ней можно получить доступ.
Object pool (пул объектов)
По аналогии с «пулом одиночек» данный паттерн также позволяет хранить уже готовые объекты, однако они не обязаны быть «одиночками».
Factory (фабрика)
Читать дальше
Основные идеи объектно-ориентированного подхода опираются на следующие положения:
программа представляет собой модель некоторого реального процесса, части реального мира; модель содержит не все признаки и свойства представляемой ею части реального мира, а только те, которые существенны для разрабатываемой программной системы;
модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов;
объект описывается набором атрибутов (свойств), значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект;
взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому; сообщение, полученное объектом, может потребовать выполнения определенных действий, например изменения состояния объекта;
объекты, описанные одним и тем же набором атрибутов и способные выполнять один и тот же набор операций, представляют собой класс однотипных объектов.
Объектно-ориентированное программирование - сложная, но эффективная парадигма программирования. Ее стоит знать всем, кто хочет создавать программы и найти работу, потому что почти все популярные языки ее поддерживают, а работодатели - требуют.
Читать дальше
1. Бретт, Маклафлин Объектно-ориентированный анализ и проектирование / Маклафлин Бретт. - М.: Питер, 2018. - 324 c.
2. Вайсфельд, Мэтт Объектно-ориентированное мышление / Мэтт Вайсфельд. - М.: Питер, 2019. - 387 c.
3. Войников, Н. А. Системное программирование для ПРАВЕЦ-16 / Н.А. Войников. - М.: Техника, 1990. - 256 c.
4. Вычислительная техника и обработка данных. Терминологический толковый словарь фирмы IBM. - М.: Статистика, 1978. - 232 c.
5. Джонсон, Ральф Приемы объектно-ориентированного проектирования. Паттерны проектирования / Ральф Джонсон. - М.: Питер, 2017. - 122 c.
6. Жуков, А. Ассемблер / А. Жуков, А. Авдюхин. - М.: БХВ-Петербург, 2012. - 448 c.
7. Зандстра, Мэтт PHP. Объекты, шаблоны и методики программирования / Мэтт Зандстра. - М.: Вильямс, 2020. - 576 c.
8. Зубков, С. В. Assembler для DOS, Windows и Unix / С.В. Зубков. - М.: ДМК Пресс, 2015. - 638 c.
9. Йордон, Эдвард Объектно-ориентированный анализ и проектирование систем / Эдвард Йордон , Карл Аргила. - М.: ЛОРИ, 2020. - 264 c.
10. Колесов, Ю. Б. Объектно-ориентированное моделирование в среде Rand Model Designer 7 / Ю.Б. Колесов, Ю.Б. Сениченков. - М.: Проспект, 2019. - 256 c.
11. Лафоре, Роберт Объектно-ориентированное программирование в С++ / Роберт Лафоре. - М.: Питер, 2019. - 928 c.
12. Майко, Г.В. Assembler для IBM PC / Г.В. Майко. - М.: Бизнес-Информ, 1997. - 212 c.
13. Маклафлин, Б. Объектно-ориентированный анализ и проектирование / Б. Маклафлин, Г. Поллайс, Д. Уэст. - М.: Питер, 2020. - 891 c.
14. Приемы объектно-ориентированного проектирования: Паттерны проектирования / Э. Гамма и др. - М.: Addison Wesley Longman, Inc., 2019. - 368 c.
15. Радд, У. Программирование на языке ассемблера и вычислительные системы IBM 360 и 370 / У. Радд. - М.: Мир, 1979. - 592 c.
16. Фридман, А. Л. Объектно-ориентированное программирование на языке Си++ / А.Л. Фридман. - Москва: Наука, 2017. - 234 c.
17. Эллайн, Алекс C++. От ламера до программера / Алекс Эллайн. - М.: Питер, 2019. - 935 c.
Читать дальше