Файл: Основные понятия объектно- ориентированного программирования.pdf
Добавлен: 04.04.2023
Просмотров: 164
Скачиваний: 2
Объектно-ориентированный подход имеет множество существенных достоинств, среди них — гибкость и масштабируемость. Мы знаем, что программа тем или иным образом отражает реально существующий или воображаемый мир, заставляя думать о поставленной задаче в терминах объектов, населяющих этот мир, а не в терминах компьютерного языка. Благодаря этому изменяется сам процесс мышления: программистам становится намного легче понимать и трансформировать программы, даже если они были созданы другими разработчиками.[61]
Второй наиболее сильной стороной ООП является возможность повторного использования кода. Программное обеспечение изменяется гораздо медленнее, чем информационные потребности общества, таким образом, ПО, основанное на общих моделях, имеет большие перспективы, чем созданное для решения конкретных сиюминутных проблем. К примеру, процедурное ПО каждый раз пишется с самого начала, не так много процедур пригодно для повторного использования. При структурном проектировании повторное использование кода иногда допускается: написанная процедура может быть применена неоднократно.
В объектно-ориентированном программировании идея повторного использования выходит на совершенно новый уровень.[62] Взамен программы как набора последовательных инструкций ООП представляет программу как совокупность объектов. Объекты выступают строительными элементами, которые не просто выполняют конкретные задачи, а моделируют реально существующие предметы и явления, что позволяет повторно использовать их в будущем. Создание новых элементов, адаптированных к новому контексту использования из уже существующих классов, значительно экономит время и в разы сокращает количество системных ошибок, программы становятся надежнее и проще в использовании.[63]
Однако, по общему признанию, принцип наследования в ООП не является идеальным. Базовый класс, от которого происходит наследование, является слишком крупной единицей для повторного использования, а проектирование качественного базового класса крайне затруднительно и требует досконального знания всех будущих областей применения.[64]
Глава 5. Критика объектно-ориентированного подхода
Несмотря на то, что ООП является самой популярной и широко используемой парадигмой, его не обходят стороной многочисленные критические замечания. Среди основных - отсутствие разницы в продуктивности при использовании процедурного и объектно-ориентированном подхода, а также преувеличение значимости ООП как всемогущего метода разработки, способного устранить все сложности, сопряженные с разработкой программного обеспечения.[65]
В 2000 году на весь компьютерный мир прогремела публикация статьи доктора компьютерных наук, старшего архитектора по разработке ПО в Sun Microsystems, а позже в IBM, Ричарда Гэбриела «Почему объектно-ориентированное программирование провалилось». Острый и злободневный текст вызвал бурную полемику, в которую включились все, от редакции популярного журнала Dr. Dobb’s Journal до всемирно известного специалиста в области информационных технологий Эндрю Таненбаума.[66]
Спустя два года после выхода нашумевшей статьи, автор был приглашен на ежегодную конференцию OOPSLA — одно из самых авторитетных мероприятий IT-сообщества, затрагивающее темы, связанные с системами объектно-ориентированного программирования, языками и методологиями разработки ПО. Оппонентом Ричарда Гэбриела в профессиональном споре стал разработчик языка Scheme, специалист-теоретик по ООП Гай Стил. В качестве еще одного критика ООП выступил специалист по Lisp, автор многочисленных книг и стандартизаций Пол Грэм. К «защитникам» объектно-ориентированных технологий примкнул автор множества трудов и работ по теории ООП Джеймс Ноубл.[67]
В своем выступлении Пол Грэм замечает, что большинство концепций ООП не оправдали себя: “Метод повторного использования почему-то связали с объектно-ориентированным программированием. К примеру, библиотеки можно подгружать и повторно использовать сколько угодно, при этом неважно, написаны они в объектно-ориентированном стиле или нет.”[68]
Еще один критик ООП, Александр Степанов, участвовавший в создании C++ вместе c Бьерном Страуструпом, придерживается того же мнения: “Я уверен, что парадигма ООП методологически неверна. Она начинает с построения классов. Это, как если бы математики начинали с аксиом. Но никто не начинает с аксиом, сначала вы должны развивать алгоритмы, и только в конце сформулировать четкие и непротиворечивые интерфейсы.” Томас Поток из Oak Ridge National Laboratory привел результаты крупного исследования, показавшего отсутствие разницы в производительности между разработчиками в объектно-ориентированном и процедурном стиле.
Сам Гэбриел сравнил ситуацию с ООП с провалом концепции эфиродинамики в физике. По его мнению, объектно-ориентированное программирование создавалось как некая “серебряная пуля” в борьбе со сложностью разработки, но ему не удалось оправдать возложенных на него надежд. Все идеи из выступления Ричарда Гэбриела были им систематизированы и объединены в брошюру, выложенную в свободный доступ в дополнении к презентации.[69] Результатом столь оживленной и актуальной дискуссии стал рост числа сторонников Гэбриела, попытавшихся развернуть критику ООП в многочисленных статьях и публикация. А вот «адептам» объектно-ориентированного подхода не удалось ни оказать достойное противодействие в рамках конференции, ни оформить результаты своего выступления для последующего ознакомления.
Сложно сказать, кто из участников этой дискуссии окажется прав в итоге. В любом случае, программирование существовало до ООП и очевидно будет существовать после него, пополняясь новыми методиками и следуя за развитием прогресса.
Заключение
Разработка программного обеспечения — это одна сложнейших областей деятельности человека. В условиях постоянного повышения уровня сложности задач, стоящих перед людьми, вопрос эффективности программных средств является крайне актуальным, а увеличение продуктивности на данный момент невозможно без использования объектно-ориентированного подхода.
Объектно-ориентированное программирование — это не просто перечень дополнительных свойств, добавленных в уже существующий язык. Это новый шаг в самом осмыслении процессов решения задач программными средствами, это революционная идея, отличающаяся от всего, что когда-либо происходило в программировании, эволюционный шаг, естественным образом вытекающий из предшествующей истории.
В то же время, объектно-ориентированное программирование — это лишь крайнее звено этой эволюционной цепи. Проблемы, встающие перед обществом, становятся все более грандиозными и всегда опережают его возможности. Хотя объектно-ориентированное программирование и является хорошим помощником в безнадежной борьбе с непреодолимой сложностью стоящих перед человечеством задач и бесконечном поиске их решений, эта концепция отнюдь не является заключительным шагом.
У нас пока нет универсальных книг или справочников, нет технологий, способных охватить весь спектр задач, которые мы сами перед собой ставим, чем больше мы продвигаемся вперед по пути прогресса, тем больше вопросов, тем больше неизвестного обнаруживаем мы перед собой. Однако, в этом нет ничего плохого, ведь мы находимся в самом начале огромного, но очень захватывающего пути, на протяжении которого нас ждет еще очень много интересного, новых знаний, открытий, загадок и ключей к ним.
Список использованных источников
- Павловская Т.А. C/C++.Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. - 352 с.
- Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер, 2004. - 928 с.
- Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. - 464 с.
- Страуструп Б. Дизайн и эволюция С++. СПб.: Питер, 2006. - 448 с.
- Мейер Б. Почувствуй класс. М.: БИНОМ. Лаборатория знаний, 2011. - 775 с.
- Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. - 304 с.
- Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. - 444 с.
- Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. – 328 с.
- Лавров С. Программирование. Математические основы, средства, теория. СПб.: БХВ-Петербург, 2002. – 320 с.
- Гради Б. Объектно-ориентированное проектирование с примерами применения. М.: Конкорд, 1992. – 519 с.
- Бобровский С. История объектно-ориентированного программирования // PC Week — 2003. — № 28
- Петросян Г. Анализ объектно-ориентированной парадигмы и поиск лучшей альтернативы // Научно-технические ведомости СПбГПУ – 2012 - №6
- Касторнов А., Касторнова В. ООП как перспективное направление развития школьного курса информатики // Вестник ЧГУ – 2017 - №5
- Гербеков К., Башкаева О. ООП в школьном курсе информатики // Вестник РУДН – 2017 - №2
- Кэй, Алан Кёртис // Википедия. [2007—2019]. Дата обновления: 08.04.2019. URL: https://ru.wikipedia.org/?oldid=99094139 (дата обращения: 12.01.2019)
- Smalltalk // Википедия. [2004—2019]. Дата обновления: 11.02.2019. URL: https://ru.wikipedia.org/?oldid=98037207 (дата обращения: 12.01.2019)
- C++ // Википедия. [2004—2019]. Дата обновления: 24.05.2019. URL: https://ru.wikipedia.org/?oldid=100005295 (дата обращения: 15.01.2019)
- Объектно-ориентированное программирование // Википедия. [2004—2019]. Дата обновления: 26.02.2019. URL: https://ru.wikipedia.org/?oldid=98346572 (дата обращения: 23.01.2019)
- Компонентно-ориентированное программирование // Википедия. [2006—2019]. Дата обновления: 03.05.2019. URL: https://ru.wikipedia.org/?oldid=99564163 (дата обращения: 23.01.2019)
- Прототипное программирование // Википедия. [2006—2019]. Дата обновления: 31.05.2019. URL: https://ru.wikipedia.org/?oldid=100142782 (дата обращения: 23.01.2019)
- Абстракция данных // Википедия. [2004—2019]. Дата обновления: 12.05.2019. URL: https://ru.wikipedia.org/?oldid=99739812 (дата обращения: 13.02.2019)
- Инкапсуляция (программирование) // Википедия. [2005—2019]. Дата обновления: 18.03.2019. URL: https://ru.wikipedia.org/?oldid=98709991 (дата обращения: 13.02.2019)
- Наследование (программирование) // Википедия. [2005—2018]. Дата обновления: 17.12.2018. URL: https://ru.wikipedia.org/?oldid=96905999 (дата обращения: 13.02.2019)
- Объект (программирование) // Википедия. [2006—2019]. Дата обновления: 22.05.2019. URL: https://ru.wikipedia.org/?oldid=99964343 (дата обращения: 22.02.2019)
- Класс (программирование) // Википедия. [2018—2018]. Дата обновления: 04.10.2018. URL: https://ru.wikipedia.org/?oldid=95418719 (дата обращения: 22.02.2019)
- Савчук И. Почему ООП провалилось // CIT Forum. 2010. URL: http://citforum.ru/gazeta/165 (дата обращения: 15.04.2019)
- Леонов Д. Объектная парадигма не провалилась // BugTraq.Ru. 2004. URL: https://bugtraq.ru/library/programming/objectshavenotfailed.html (дата обращения: 15.04.2019)
- Почему ООП провалилось? // IT Community/. 2012. URL: http://it.icmp.ru/post/view/7288 (дата обращения: 15.04.2019)
- Майборода А. Объектная парадигма провалилась // BugTraq.Ru. 2004. URL: https://bugtraq.ru/library/programming/objectshavefailed.html (дата обращения: 15.04.2019)
-
Павловская Т.А. Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. С. 160 ↑
-
Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер, 2004. С. 33 ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 23 ↑
-
Кей, Алан Кёртис // Википедия. [2007—2019] (дата обращения: 12.01.2019) ↑
-
Smalltalk // Википедия. [2004—2019] (дата обращения: 12.01.2019) ↑
-
Бобровский С. История объектно-ориентированного программирования // PC Week — 2003. — № 28 ↑
-
C++ // Википедия. [2004—2019] (дата обращения: 15.01.2019) ↑
-
Страуструп Б. Дизайн и эволюция С++. СПб.: Питер, 2006. С. 31 ↑
-
Мейер Б. Почувствуй класс. М.: БИНОМ. Лаборатория знаний, 2011. С. 39 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 20 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 3 ↑
-
Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер, 2004. С. 44 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 12 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 37 ↑
-
Касторнов А., Касторнова В. ООП как перспективное направление развития школьного курса информатики // Вестник ЧГУ – 2017 - №5 – С. 178 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 20 ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 21 ↑
-
Мейер Б. Почувствуй класс. М.: БИНОМ. Лаборатория знаний, 2011. С. 70 ↑
-
Павловская Т.А. Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. С. 160 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 14 ↑
-
Лавров С. Программирование. СПб.: БХВ-Петербург, 2002. С. 207 ↑
-
Объектно-ориентированное программирование // Википедия. [2004—2019] (дата обращения: 23.01.2019) ↑
-
Компонентно-ориентированное программирование // Википедия. [2006—2019] (дата обращения: 23.01.2019) ↑
-
Прототипное программирование // Википедия. [2006—2019] (дата обращения: 23.01.2019) ↑
-
Гради Б. Объектно-ориентированное проектирование с примерами применения. М.: Конкорд, 1992. С. 44 ↑
-
Абстракция данных // Википедия. [2004—2019] (дата обращения: 13.02.2019) ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 18 ↑
-
Инкапсуляция (программирование) // Википедия. [2005—2019] (дата обращения: 13.02.2019) ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 18 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 36 ↑
-
Павловская Т.А. Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. С. 163 ↑
-
Биллиг В., Мусикаев И. Книга для программистов. М.: Русская редакция, 1996. С. 205 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 15 ↑
-
Павловская Т.А. Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. С. 194 ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 110 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 23 ↑
-
Наследование (программирование) // Википедия. [2005—2019] (дата обращения: 13.02.2019) ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 198 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 41 ↑
-
Павловская Т.А. Структурное и объектно-ориентированное программирование. СПб.: Питер, 2011. С. 163 ↑
-
Касторнов А., Касторнова В. ООП как перспективное направление развития школьного курса информатики // Вестник ЧГУ – 2017 - №5 – С. 180 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 20 ↑
-
Мейер Б. Почувствуй класс. М.: БИНОМ. Лаборатория знаний, 2011. С. 73 ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 14 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 32 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 14 ↑
-
Объект (программирование) // Википедия. [2006—2019] (дата обращения: 22.02.2019) ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 69 ↑
-
Биллиг В., Мусикаев И. Книга для программистов. М.: Русская редакция, 1996. С. 206 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 58 ↑
-
Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. С. 42 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 15 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 33 ↑
-
Класс (программирование) // Википедия. [2005—2019] (дата обращения: 22.02.2019) ↑
-
Биллиг В., Мусикаев И. Книга для программистов. М.: Русская редакция, 1996. С. 204 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 32 ↑
-
Касторнов А., Касторнова В. ООП как перспективное направление развития школьного курса информатики // Вестник ЧГУ – 2017 - №5 – С. 178 ↑
-
Медведев В. Особенности ООП на С++/CLI, C3 и Java. Казань: РИЦ «Школа», 2010. С. 10 ↑
-
Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер, 2004. С. 26 ↑
-
Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер, 2004. С. 26 ↑
-
Кирютенко Ю.А. Объектно-ориентированное программирование. М.: Вузовская книга, 2006. С. 16 ↑
-
Вайсфельд М. Объектно-ориентированное мышление. СПб.: Питер, 2014. С. 24 ↑
-
Гербеков К., Башкаева О. ООП в школьном курсе информатики // Вестник РУДН – 2017 - №2 – С. 157 ↑
-
Петросян Г. Анализ объектно-ориентированной парадигмы и поиск лучшей альтернативы // Научно-технические ведомости СПбГПУ – 2012 - №6 – С. 88 ↑
-
Объектно-ориентированное программирование // Википедия. [2004—2019] (дата обращения: 23.01.2019) ↑
-
Савчук И. Почему ООП провалилось // CIT Forum. 2010 (дата обращения: 15.04.2019) ↑
-
Леонов Д. Объектная парадигма не провалилась // BugTraq.Ru. 2004. (дата обращения: 15.04.2019) ↑
-
Почему ООП провалилось? // IT Community/. 2012. (дата обращения: 15.04.2019) ↑
-
Майборода А. Объектная парадигма провалилась // BugTraq.Ru. 2004. (дата обращения: 15.04.2019) ↑