Файл: История и развитие методологии объектно-ориентированного программирования. Сферы ее применения..pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 20.05.2023

Просмотров: 350

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Эдсгер Дейкстра указывал: «…то, о чём общество в большинстве случаев просит — это эликсир от всех болезней. Естественно, "эликсир" имеет очень впечатляющие названия, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…»[67].

Никлаус Вирт считает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.

Эдсгер Дейкстра указывал: «…то, о чём общество в большинстве случаев просит — это эликсир от всех болезней. Естественно, "эликсир" имеет очень впечатляющие названия, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…»[68]

Патрику Киллелиа принадлежит цитата «…ООП предоставляет вам множество способов замедлить работу ваших программ…».[69]

Фредерик Брукс указывает, что наиболее сложной частью создания программного обеспечения является «…спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является «серебряной пулей», которая могла бы на порядок величины снизить сложность разработки программных систем. Согласно Бруксу, «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…»[70]

Указывается на то, что целый ряд «врождённых особенностей» ООП-технологии делает построенные на её основе программы технически менее эффективными, по сравнению с аналогичными необъектными программами. Не отрицая действительно имеющихся дополнительных накладных расходов на организацию работы ООП-программ (см. раздел «Производительность» выше), нужно, однако, отметить, что значение снижения производительности часто преувеличивается критиками. В современных условиях, когда технические возможности компьютеров чрезвычайно велики и постоянно растут, для большинства прикладных программ техническая эффективность оказывается менее существенна, чем функциональность, скорость разработки и сопровождаемость. Лишь для некоторого, очень ограниченного класса программ (ПО встроенных систем, драйверы устройств, низкоуровневая часть системного ПО, научное ПО) производительность остаётся критическим фактором.


Итого, несмотря на то, что объектно-ориентированная парадигма пользуется значительной популярностью и применяется в большом количестве современных коммерческих проектов, имеющих отношение к информационным технологиям, ООП подвержено критики со стороны отдельных авторитетных ученых, таких как Александр Степанов, Никлаус Вирт и Лука Карделли.

5. Сферы применения технологии ООП

С распространением таких языков, как UML, C#, Python, Java, Python объектно-ориентированное программирование проникло во все сферы, включая разработку веб-приложений, серверных приложений в сфере финансовых услуг, программного обеспечения (в том числе и прикладного), встроенных систем, игр (как вспомогательный язык), создания алгоритмов управления вертикальным транспортом, системном администрировании.[71] Языки объектно-ориентированного программирования активно используются при разработке программного обеспечения. Такие программы, как растровый редактор Gimp, 3d редактор Blender, центр приложений Ubuntu написаны на языке ООП Python. Так, Python используют такие корпорации, как Dropbox (одноименный сервис полностью разработан на языке Python), Google, Linux, Яндекс, Yahoo Groups и Mail.ru. Язык объектно-ориентированного программирования Java крепко проник в сферу Android-приложений, подавляющее число приложений для операционной системы Android написано на языке Java. Обширна Java и в области электронной коммерции, этот язык объектно-ориентированного программирования широко используется в финансовой сфере и инвестиционных банках. Широкое распространение объектно-ориентированное программирование получило в области веб-приложений. Многие веб-фреймворки, такие как Django, Pylons, TurboGears, CherryPy, Flask, Pyramid, Spring MVC, Struts 2.0 и Servlet написаны на таких языках ООП, как Java и Python. Даже простейшие приложения, основанные на Servlet, JSP и Struts, достаточно популярны в различных государственных проектах. Многие веб-приложения государственных, оздоровительных, страховых, образовательных, оборонительных и некоторых других отделений написаны на Java.[72]

Такие объектно-ориентированные языки программирования, как Python, Ruby и Perl используются при выполнении задач для автоматизации работы системного администрирования. Python установлен на все Linux-сервера по умолчанию. Так же, Python и Java используются для программирования встроенных систем (embedded systems). Встроенная система – это микропроцессорное устройство, обычно служащее модулем некоторого устройства. Самые известные встроенные системы, использующие язык Python - это Raspberry Pi [73]и CubieBoard[74].


Применяется объектно-ориентированное программирование и в области научных исследований. На языке Python написаны такие библиотеки для научных исследований, как Astropy[75] (используется при выполнении астрономических расчётов), SciPy (предназначена для выполнения научных и инженерных расчётов), Biopython (используется в вычислительной биологии и биоинформатике), Matplotlib (прндназначена для визуализации данных двумерной графики), а так же библиотеки, предназначенные для математических вычислений, как NumPy, Mathics, Matplotlib, Plotly, SageMath, SymPy.

Помимо этого, принцип ООП используется при создании алгоритмов управления вертикальным транспортом, таким как лифт[76]. Автоматное программирование может использоваться в одном из двух вариантов: как процедурное программирование с явным выделением состояний или как объектно-ориентированное программирование с явным выделением состояний.

В настоящей работе, как и в работе, используется второй подход, основанный на двух парадигмах: объектной и автоматной. При этом отметим, что в указанной статье автоматы реализуются, как методы классов, в то время как в настоящей работе предлагается реализовывать их, как классы. Это позволяет в полной мере совместить гибкость объектно-ориентированного программирования с наглядностью и ясностью автоматного подхода. Проектирование каждого автомата состоит в создании по словесному описанию (декларации о намерениях) схемы связей, описывающей его интерфейс, и графа переходов, определяющего его поведение. По этим двум документам формально и изоморфно может быть построен модуль программы, соответствующий автомату. Проектирование каждого автомата состоит в создании по словесному описанию (декларации о намерениях) схемы связей, описывающей его интерфейс, и графа переходов, определяющего его поведение. По этим двум документам формально и изоморфно может быть построен модуль программы, соответствующий автомату. [77]

Языки объектно-ориентированного программирования используются в разработке мультимедийных развлекательных программ/приложений (таких, как интерактивные фильмы и компьютерные игры). В таких играх, как Civilization IV[78] и World of Tanks язык [79]ООП Python используется в качестве скриптового языка, применяется для управления искусственным интеллектом.

Подводя итог, объектно-ориентированное программирование за более, чем сорок лет приобрело популярность в самых разнообразных сферах компьютерных и информационных технологий. На сегодняшний день, объектно-ориентированная парадигма используется в большинстве сфер, от создания алгоритмов для управления лифтов. программирования встроенных систем до разработки веб-приложений и системного администрирования.


Заключение

Объектно-ориентированное программирование, являвшееся небольшим проектом в шестидесятые года, получило своё развитие спустя десятилетие, при создании языка Smalltalk, под руководством Алана Кея. ООП является полноправной парадигмой программирования, наравне с функциональной, процедурной, автоматной и обобщённой. В свою очередь, ООП послужило основой создания новых парадигм, таких как класс-ориентированная, концептная и компонентно-ориентированная.

Несмотря на то, что объектно-ориентированная парадигма подвергается критике со стороны некоторых авторитетных учёных, таких как Александр Степанов, Никлаус Вирт и Лука Карделли, ООП используется в большом количестве коммерческих проектов, связанных с информационными технологиями. Объектно-ориентированная парадигма используется при разработке веб-приложений, программного обеспечения, серверных приложений, развлекательных мультимедийных приложений, системном администрировании, научных проектах, программировании встроенных систем и т.д.

ООП продолжает развиваться и ныне, приобретая всё большее распространение.

Библиография

Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, Классы и объекты.;

Жоголев Е.А. Лекции по технологии программирования: Учебное пособие. М.: Издательский отдел факуль-тета ВМиК МГУ, 2001;

Знакомство с прототипным объектно-ориентированным программированием. Официальный сайт IBM. URL: [https://www.ibm.com/developerworks/ru/library/wa-protoop/];

Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Princi-ples & Practice. — 3-е изд. — М.: «Вильямс», 2004. — С. 880.;

Л. А. Наумов, А. А. Шалыто. Искусство программирования лифта. Объектно-ориентированное программирование с явным выделением состояний.;

НОУ «Интуит» Лекция 14: Иерархия классов. URL:[http://www.intuit.ru/studies/courses/486/342/lecture/8244];

НОУ «Интуит». Лекция 1: Современные технологии объектно-ориентированного анализа и проектирования информационных систем. URL:[ http://www.intuit.ru/studies/courses/32/32/lecture/1000];

НОУ «Интуит» Лекция 6: Введение в объектно-ориентированное программирование. URL:[http://www.intuit.ru/studies/courses/15889/484/lecture/10994];

НОУ Интуит Лекция 12: Компонентные технологии и разработка распределенного ПО.;

Официальный сайт Adobe. Object-oriented programming concepts: Objects and classes. URL: [http://www.adobe.com/devnet/actionscript/learning/oop-concepts/objects-and-classes.html];


Официальная документация по технологиям Java. URL: [http://www.oracle.com/technetwork/java/index.html];

Официальный сайт Raspberry Pi URL: [https://www.raspberrypi.org/documentation/usage/python/];

Патрик Киллелиа. «Тюнинг веб-сервера».;

Трей Нэш «C# 2010: ускоренный курс для профессионалов»;

Что такое компонентно-ориентированное программирование (краткая справка) (рус.). Архивировано из первоисточника на WebCite 13 февраля 2012 года. URL: [http://www.inr.ac.ru/~info21/info/qtocop.htm];

Шахгельдян К.И., редактор: Александрова Л.И:Объектно-ориентированное программирование (Учебное пособие).;

Atkinson, M. and Buneman, P. June 1987. Types and Persistence in Database Programming Languages. ACM Com-puting Surveys vol.19(2), p.105.;

Armstrong, Joe. In Coders at Work: Reflections on the Craft of Programming.;

About Astropy. URL: [http://www.astropy.org/];

Bertrand Meyer. Eiffel: The Language;

Barr,A.and Feigenbaum. E. 1981. The Handbook of Artificial Intelligence. vol.1.Los Altos, CA: William Kaufmann, p.216.;

Benjamin C. Pierce. Types and Programming Languages. — MIT Press, 2002-01-01;

Chen, P. March 1976. The Entity-Relationship Model - Toward a Unified View of Data. ACM Transactions on Data-base Systems vol.1(1).;

Cardelli, Luca (1996). "Bad Engineering Properties of Object-Oriented Languages".;

C. J. Date, Hugh Darwen. Foundation for Future Database Systems: The Third Manifesto (2nd Edition);

“Civilization IV Official Press Sheet". IGN. 31 May 2005. 620531p1.” URL: [http://pc.gamespy.com/pc/civilization-iv/662218p1.html];

David T. Craig. Apple Lisa Computer: History of Apple and Pascal.;

Eric Kidd. Getting Started with Dylan;

Eric S. Raymond (2003). "The Art of Unix Programming: Unix and Object-Oriented Languages".;

EWD 1175: The strengths of the academic enterprise;

EWD 1175: The strengths of the academic enterprise. The University of Texas in Austin. Department of Computer Science. URL: [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD11xx/EWD1175.html];

General Python FAQ. What is Python good for? URL: [https://docs.python.org/3/faq/general.html#why-was-python-created-in-the-first-place];

Guttag, J. 1980. Abstract Data Types and the Development of Data Structures, in Programming Language Design. New York, NY: Computer Society Press.;

Graham, Paul. "Why ARC isn't especially Object-Oriented.";

“GUI в игре World of Tanks. Часть вторая: обзор структуры GUI и планы на будущее” Хабрахабр. [https://habrahabr.ru/company/wargaming/blog/229261/];

Javarevisited. Where is Java used in Real World? URL: [http://javarevisited.blogspot.bg/2014/12/where-does-java-used-in-real-world.html];

Liskov, B. and Zilles, S. 1977. An Introduction to Formal Specifications of Data Abstractions. Current Trends in Pro-gramming Methodology: Software Specification and Design vol.1. Englewood Cliffs. NJ: Prentice-Hall.;

Neal Feinberg. Dylan Programming: An Object-oriented and Dynamic Language. — Addison-Wesley, 1997. — 442 с.;

Nygaard, K. and Dahl, O-J. 1981. The Development of the Simula Languages, in History of Programming Languages. New York, NY: Academic Press, p.460.;

«No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987);

Oracle: The History of Java Technology. URL: [http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html];

Parnas, D. 1979. On the Criteria to the Be Used in Decomposing Systems into Modules, in Classics in Software En-gineering. New York, NY: Yourdon Press.;

Potok, Thomas; Mladen Vouk; Andy Rindos (1999). "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment";

Pike, Rob "Less is exponentially more".;

Pike, Rob. "A few years ago, I saw this page".;

Radeck, Kirk C# and Java: Comparing Programming Languages (англ.). MSDN (October 2003);

Rumbaugh, J. April 1988. Relational Database Design Using an Object-oriented Methodology. Communications of the ACM vol.31(4), p.415.;