Файл: История и основные понятия объектно-ориентированного программирования.pdf
Добавлен: 04.04.2023
Просмотров: 79
Скачиваний: 2
В данном примере разная реализация метода say() в классах Man, а также, Women - Это и есть полиморфизм.
Достоинства и недостатки объектно-ориентированного программирования
Перечислим достоинства, которые приобретает программа при использовании объектно-ориентированного подхода к ее проектированию и кодированию.
Инкапсуляция повышает надежность работы программного кода, поскольку гарантирует, что определенные данные не могут быть изменены за пределами содержащего их класса[34].
Наследование – это эффективный способ выделения многократно используемых фрагментов кода, но у него есть и минусы, о которых будет рассказано далее[35].
Собственно, абстрагирование есть следствие наследования: базовые классы не всегда имеют свою проекцию на объекты реального мира, а создаются исключительно с целью выделить общие черты целой группы объектов[36]. К примеру, объект мебель – это базовое понятие для стола, стула и дивана, всех их объединяет то, что это движимое имущество, часть интерьера помещений, и они могут быть выполнены для дома или офиса, а также относиться к “эконом” или “премиум” классу. В ООП есть для этого отдельное понятие абстрактный класс – класс, объекты которого создавать запрещено, но можно использовать в качестве базового класса. Наследование и абстрагирование позволяют описывать структуры данных программы и связи между ними точно так же, как выглядят соответствующие им объекты в рассматриваемой модели предметной области.
Полиморфизм – это возможность единообразного общения с объектами разных классов через определенный интерфейс. Идеология полиморфизма гласит, что для общения с объектом не нужно знать его тип, а нужно знать, какой интерфейс он поддерживает.
Интерфейс. В некоторых языках программирования (C#, Java) понятие интерфейса выделено явно - это не только открытые методы и свойства самого класса[37]. Такие языки, как правило, не поддерживают множественного наследования и компенсируют это тем, что любой объект может иметь один базовый объект и реализовывать любое количество интерфейсов. Интерфейс в их интерпретации – это подобие абстрактного класса, содержащего только описание (сигнатуру) открытых методов и свойств. Реализация интерфейса ложится на плечи каждого класса, который собирается его поддерживать[38]. Один и тот же интерфейс могут реализовывать классы абсолютно разных иерархий, что расширяет возможности полиморфизма. К примеру, интерфейс «сохранение/восстановление информации в базе данных» могли бы реализовывать как классы иерархии «мебель», так и классы, связанные с оформлением заказов на изготовление мебели, а при нажатии на кнопку “сохранить” программа бы прошлась по всем объектами, запросила бы у них этот интерфейс и вызвала бы соответствующий метод.
Недостатки объектно-ориентированного программирования
Про то, что популярность объектно-ориентированного подхода к созданию программных продуктов огромна уже было сказано. Много тех, кто стремится расширить эту парадигму довольно много,. Но есть еще один способ выделиться среди огромного сообщества специалистов в информационных технологиях – это заявить, что ООП себя не оправдало, что это не панацея, а, скорее, плацебо[39]. Есть среди этих людей действительно специалисты очень высокого класса, такие как Кристофер Дэйт, Александр Степанов, Эдсгер Дейкстра и другие, и их мнение заслуживает внимания. Вот они, наиболее очевидные недостатки ООП, на которые указывают специалисты:
- ООП порождает огромные иерархии классов, что приводит к тому, что функциональность расползается или, как говорят, размывается по базовым и производным членам класса, и отследить логику работы того или иного метода становится сложно.
- В некоторых языках все данные являются объектами, в том числе и элементарные типы, а это не может не приводить к дополнительным расходам памяти и процессорного времени.
- Также, на скорости выполнения программ может неблагоприятно сказаться реализация полиморфизма, которая основана на механизмах позднего связывания вызова метода с конкретной его реализацией в одном из производных классов.
- Психологический аспект. Многие считают, что ООП это круто и начинают использовать его подходы всегда и везде и без разбору. Все это приводит к снижению производительности программ в частности и дискредитации ООП в целом.
ЗАКЛЮЧЕНИЕ
В настоящее время насчитывается более двух тысяч языков программирования высокого уровня. Большинство этих языков возникло исходя из конкретных требований некоторой предметной области. Каждый новый язык позволял переходить ко все более и более сложным задачам. На каждом новом приложении разработчики языков что-то открывали для себя и изменяли свои представления о существенном и несущественном в языке. На развитие языков программирования значительное влияние оказали достижения теории вычислении, которые привели к формальному пониманию семантики операторов, модулей, абстрактных типов данных и процедур.
К настоящему времени насчитывается более сотни различных объектных и объектно-ориентированных языков.
Объектно-ориентированное программирование является в настоящее время основой всей индустрии прикладного программирования благодаря выигрышу в конкурентной борьбе с альтернативными технологиями.
ООП является невероятно удобным современным способом, который позволяет грамотно организовывать структуры достаточно сложных программ. Другие разработчики смогут поддерживать разрастающийся функционально проект, благодаря ООП. Это достаточно важное преимущество ООП.
При разработке масштабной системы без ООП не обойтись. Оно показывает отличные результаты в условиях изменения требований заказчика, обладая гибкостью в обслуживании и возможностью повторного использования кода. Кроме этого, проекты ООП легче поддаются автоматическому тестированию.
Но это совсем не значит, что вы не надо использовать ПП. Если программист только начинает оценивать, какой функционал ему потребуется, т.е. он создаёт прототип, то лучше начать с ПП. Ему пока не нужно продумывать всю архитектуру вашего будущего приложения. Ему нужен минимальный функционал, чтобы примерно показать как всё будет работать.
Были указаны недостатки ООП, но при этом весь предыдущий материал объективно свидетельствовал о достоинствах этого подхода.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
- Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] / Л. Г. Гагарина, А. Р. Федоров, П. А. Федоров. - Москва : ФОРУМ : ИНФРА-М, 2017. - 319 с.
- Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – 118 с.
- Карпенков С. Х. Современные средства информационных технологий : [учебное пособие для студентов высших учебных заведений, обучающихся по направлениям подготовки дипломированных специалистов "Информатика и вычислительная техника" и "Информационные системы"] / С. Х. Карпенков. - 2-е изд., испр. и доп. - Москва : КноРус, 2017. – 399 с.
- Колдаев В. Д. Основы алгоритмизации и программирования : [учебное пособие для студентов учреждений среднего профессионального образования, обучающихся по группе специальностей 2200 "Информатика и вычислительная техника"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / В. Д. Колдаев ; под ред. Л. Г. Гагариной. - Москва : ФОРУМ : ИНФРА-М, 2016. - 413 с.
- Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика"] / Ю. И. Кудинов, Ф. Ф. Пащенко. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. - 255 с.
- Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] / И. М. Лазарева ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. - 97 с.
- Малявко А. А. Формальные языки и компиляторы : учебное пособие для вузов : [для студентов высших учебных заведений, обучающихся по направлению подготовки "Информатика и вычислительная техника"] / А. А. Малявко ; Новосиб. гос. техн. ун-т. - Москва : Юрайт, 2017. - 431 с.
- Орлов С. А. Программная инженерия. Технологии разработки программного обеспечения : [учебник для студентов высших учебных заведений, обучающихся по специальности "Программное обеспечение вычислительной техники и автоматизированных систем" направлений подготовки дипломированных специалистов "Информатика и вычислительная техника"] / С. А. Орлов. - 5-е изд., обновл. И доп. - Санкт-Петербург [и др.] : Питер, 2016. - 640 с.
- Тузовский А. Ф. Объектно-ориентированное программирование : учебное пособие для прикладного бакалавриата / А. Ф. Тузовский ; Нац. исслед. Том. политехн. ун-т. - Москва : Юрайт, 2016. - 206 с.
- Федорова Г. Н. Разработка программных модулей программного обеспечения для компьютерных систем : учебник : [для использования в учебном процессе образовательных организаций, реализующих программы среднего профессионального образования по специальности "Программирование в компьютерных системах"] / Г. Н. Федорова. - Москва : Академия, 2016. – 332 с.
- Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] / И. В. Черпаков ; Финансовый ун-т при Правительстве Рос. Федерации, 2017. – 198 с.
-
Колдаев В. Д. Основы алгоритмизации и программирования : соответствует Федеральному государственному образовательному стандарту 3-го поколения / В. Д. Колдаев ; под ред. Л. Г. Гагариной. - Москва : ФОРУМ : ИНФРА-М, 2016. – С. 28.. ↑
-
Малявко А. А. Формальные языки и компиляторы : учебное пособие для вузов : / А. А. Малявко ; Новосиб. гос. техн. ун-т. - Москва : Юрайт, 2017. – С. 31. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО / И. В. Черпаков ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 29. ↑
-
Орлов С. А. Программная инженерия. Технологии разработки программного обеспечения. - 5-е изд., обновл. И доп. - Санкт-Петербург [и др.] : Питер, 2016. – С. 67. ↑
-
Кудинов Ю. И. Основы современной информатики / Ю. И. Кудинов, Ф. Ф. Пащенко. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. - С. 41. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. –С. 89. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 56. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 112. ↑
-
Тузовский А. Ф. Объектно-ориентированное программирование : учебное пособие для прикладного бакалавриата / А. Ф. Тузовский ; Нац. исслед. Том. политехн. ун-т. - Москва : Юрайт, 2016. – С. 42. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. –С. 103. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")]. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 89. ↑
-
Орлов С. А. Программная инженерия. Технологии разработки программного обеспечения : [учебник для студентов высших учебных заведений, обучающихся по специальности "Программное обеспечение вычислительной техники и автоматизированных систем" направлений подготовки дипломированных специалистов "Информатика и вычислительная техника"]. - 5-е изд., обновл. И доп. - Санкт-Петербург [и др.] : Питер, 2016. –С. 92. ↑
-
Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] / И. М. Лазарева ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. – С. 12.. ↑
-
Тузовский А. Ф. Объектно-ориентированное программирование : учебное пособие для прикладного бакалавриата / А. Ф. Тузовский ; Нац. исслед. Том. политехн. ун-т. - Москва : Юрайт, 2016. – С. 124. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] / И. В. Черпаков ; Финансовый ун-т при Правительстве Рос. Федерации, 2017. – С. 51. ↑
-
Малявко А. А. Формальные языки и компиляторы : учебное пособие для вузов : [для студентов высших учебных заведений, обучающихся по направлению подготовки "Информатика и вычислительная техника"] / А. А. Малявко ; Новосиб. гос. техн. ун-т. - Москва : Юрайт, 2017. - 121 с. ↑
-
Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика"]. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. – С. 102. ↑
-
. Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 77. ↑
-
Карпенков С. Х. Современные средства информационных технологий : [учебное пособие для студентов высших учебных заведений, обучающихся по направлениям подготовки дипломированных специалистов "Информатика и вычислительная техника" и "Информационные системы. - 2-е изд., испр. и доп. - Москва : КноРус, 2017. – С. 109. ↑
-
Карпенков С. Х. Современные средства информационных технологий : [учебное пособие для студентов высших учебных заведений, обучающихся по направлениям подготовки дипломированных специалистов "Информатика и вычислительная техника" и "Информационные системы"]. - 2-е изд., испр. и доп. - Москва : КноРус, 2017. – С. 134. ↑
-
Колдаев В. Д. Основы алгоритмизации и программирования : [учебное пособие для студентов учреждений среднего профессионального образования, обучающихся по группе специальностей 2200 "Информатика и вычислительная техника"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения ; под ред. Л. Г. Гагариной. - Москва : ФОРУМ : ИНФРА-М, 2016 – С. 131. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 79. ↑
-
Колдаев В. Д. Основы алгоритмизации и программирования : [учебное пособие для студентов учреждений среднего профессионального образования, обучающихся по группе специальностей 2200 "Информатика и вычислительная техника"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / В. Д. Колдаев ; под ред. Л. Г. Гагариной. - Москва : ФОРУМ : ИНФРА-М, 2016 – С. 145. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] / Л. Г. Гагарина, А. Р. Федоров, П. А. Федоров. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 78. ↑
-
Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика"]. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. – С. 138. ↑
-
Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. – С. 167. ↑
-
Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] / И. М. Лазарева ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. – С. 168. ↑
-
Орлов С. А. Программная инженерия. Технологии разработки программного обеспечения : [учебник для студентов высших учебных заведений, обучающихся по специальности "Программное обеспечение вычислительной техники и автоматизированных систем" направлений подготовки дипломированных специалистов "Информатика и вычислительная техника"]. - 5-е изд., обновл. И доп. - Санкт-Петербург [и др.] : Питер, 2016. - С. 263. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 18. ↑
-
Малявко А. А. Формальные языки и компиляторы : учебное пособие для вузов : [для студентов высших учебных заведений, обучающихся по направлению подготовки "Информатика и вычислительная техника"] / А. А. Малявко ; Новосиб. гос. техн. ун-т. - Москва : Юрайт, 2017. – С. 211. ↑
-
Орлов С. А. Программная инженерия. Технологии разработки программного обеспечения : [учебник для студентов высших учебных заведений, обучающихся по специальности "Программное обеспечение вычислительной техники и автоматизированных систем" направлений подготовки дипломированных специалистов "Информатика и вычислительная техника"] / С. А. Орлов. - 5-е изд., обновл. И доп. - Санкт-Петербург [и др.] : Питер, 2016. – С. 138. ↑
-
Тузовский А. Ф. Объектно-ориентированное программирование : учебное пособие для прикладного бакалавриата / А. Ф. Тузовский ; Нац. исслед. Том. политехн. ун-т. - Москва : Юрайт, 2016. – С. 91. ↑
-
Колдаев В. Д. Основы алгоритмизации и программирования : [учебное пособие для студентов учреждений среднего профессионального образования, обучающихся по группе специальностей 2200 "Информатика и вычислительная техника"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения; под ред. Л. Г. Гагариной. - Москва : ФОРУМ : ИНФРА-М, 2016. – С. 76. ↑
-
Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика"]. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. – С. 93 ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 83. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] / И. В. Черпаков ; Финансовый ун-т при Правительстве Рос. Федерации, 2017. – С. 102. ↑
-
Малявко А. А. Формальные языки и компиляторы : учебное пособие для вузов : [для студентов высших учебных заведений, обучающихся по направлению подготовки "Информатика и вычислительная техника"] / А. А. Малявко ; Новосиб. гос. техн. ун-т. - Москва : Юрайт, 2017. – 216. с. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")]. - Москва : ФОРУМ : ИНФРА-М, 2017. – C. 127. ↑
-
Кудинов Ю. И. Основы современной информатики : [учебное пособие для студентов высших учебных заведений, обучающихся по специальности "Прикладная информатика"] / Ю. И. Кудинов, Ф. Ф. Пащенко. - Изд. 3-е, стер. - Санкт-Петербург [и др.] : Лань, 2016. – С. 143. ↑