Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save anonymous/305db9b5dccaed618c229039c8fa2e00 to your computer and use it in GitHub Desktop.
Save anonymous/305db9b5dccaed618c229039c8fa2e00 to your computer and use it in GitHub Desktop.
Общие свойства объектов ооп

Общие свойства объектов ооп



Основные принципы ООП: инкапсуляция, наследование, полиморфизм
Основные понятия ООП
Объектно-ориентированное программирование

Идеологически ООП — подход к программированию как к моделированию информационных объектов, решающий на новом уровне основную задачу структурного программирования: Управляемость для иерархических систем предполагает минимизацию избыточности данных аналогичную нормализации и их целостность, поэтому созданное удобно управляемым — будет и удобно пониматься. Таким образом через тактическую задачу управляемости решается стратегическая задача — транслировать понимание задачи программистом в наиболее удобную для дальнейшего использования форму. Основные принципы структурирования в случае ООП связаны с различными аспектами базового понимания предметной задачи, которое требуется для оптимального управления соответствующей моделью: То есть фактически речь идет о прогрессирующей организации информации согласно первичным семантическим критериям: Прогрессирование, в частности, на последнем этапе дает возможность перехода на следующий уровень детализации, что замыкает общий процесс. Обычный человеческий язык в целом отражает идеологию ООП, начиная с инкапсуляции представления о предмете в виде его имени и заканчивая полиморфизмом использования слова в переносном смысле, что в итоге развивает [3] выражение представления через имя предмета до полноценного понятия-класса. Лука Карделли [en] и Мартин Абади построили теоретическое обоснование ООП и классификацию на основе этого обоснования [5] [6] [7] [8]. Они отмечают, что выделенные ими понятия и категории вместе встречаются далеко не во всех ОО-языках, большинство языков поддерживают лишь подмножества теории, а порой и своеобразные отклонения от неё. Класс описывает абстрактное поведение. Объектные типы строятся на основе класса посредством добавления различных приватных полей и методов. Традиционно перечисляемые основные принципы ООП не аппелируют к данному теоретическому обоснованию, а являются устоявшимися в сообществе догмами что приводит к сильному разбросу вариантов изложения в разных источниках. В значительно большей степени теоретически обоснованные концепции ООП поддерживают ОО-языки, развившиеся на поприще функционального программирования: Более того, основные идеи объектного моделирования в этом случае не требуют прямой поддержки со стороны языка, а могут быть сравнительно легко эмулированы [9]. Наиболее заметные отличия в проявлении показателей качества между языками разных видов:. Обобщённое обоснование динамической диспетчеризации [en] включая множественную в середине х годов построил Джузеппе Кастанья [11] [12] [8]. ООП возникло в результате развития идеологии процедурного программирования , где данные и подпрограммы процедуры, функции их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события так называемое событийно-ориентированное программирование и компонента компонентное программирование , КОП. Взаимодействие объектов происходит посредством сообщений. Взаимодействие агентов происходит посредством изменения среды , в которой они находятся. Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной исключительные ситуации , проверки и эффективной работы, инкапсулируются от них в аспекты в аспектно-ориентированном программировании. Субъектно-ориентированное программирование расширяет понятие объекта посредством обеспечения более унифицированного и независимого взаимодействия объектов. Может являться переходной стадией между ООП и агентным программированием в части самостоятельного их взаимодействия. В момент его появления в году в нём были предложены революционные идеи: Здесь понятие класса стало основообразующей идеей для всех остальных конструкций языка то есть класс в Смолтоке является примитивом, посредством которого описаны более сложные конструкции. Именно он стал первым широко распространённым объектно-ориентированным языком программирования. В настоящее время количество прикладных языков программирования список языков , реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Примерами языков, опирающихся на модель Смолтока, являются Objective-C, Python, Ruby. В центре ООП находится понятие объекта. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. ООП имеет уже более чем сорокалетнюю историю, но, несмотря на это, до сих пор не существует чёткого общепринятого определения данной технологии [13]. Основные принципы, заложенные в первые объектные языки и системы, подверглись существенному изменению или искажению и дополнению при многочисленных реализациях последующего времени. Тимоти Бадд пишет [14] [15]:. Роджер Кинг аргументированно настаивал, что его кот является объектно-ориентированным. Кроме прочих своих достоинств, кот демонстрирует характерное поведение, реагирует на сообщения, наделён унаследованными реакциями и управляет своим, вполне независимым, внутренним состоянием. Таким образом, программа представляет собой набор объектов, имеющих состояние и поведение. Объекты взаимодействуют посредством сообщений. Естественным образом выстраивается иерархия объектов: Естественно, чтобы избежать бесконечной рекурсии в обращениях, на каком-то этапе объект трансформирует обращённое к нему сообщение в сообщения к стандартным системным объектам, предоставляемым языком и средой программирования. Устойчивость и управляемость системы обеспечивается за счёт чёткого разделения ответственности объектов за каждое действие отвечает определённый объект , однозначного определения интерфейсов меж объектного взаимодействия и полной изолированности внутренней структуры объекта от внешней среды инкапсуляции. Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задаёт внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию. Отдельного пояснения требует понятие обмена сообщениями. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов , каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Данный подход реализован в языках программирования Smalltalk , Ruby , Objective-C , Python. Однако, это приводит к тому, что сообщения уже не являются самостоятельными объектами, и, как следствие, не имеют атрибутов, что сужает возможности программирования. Концепция виртуальных методов , поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений. Как уже говорилось выше, в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом составной тип данных , имеющий в составе:. Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Если некий класс наследует или, как говорят, реализует интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию. Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга. ООП ориентировано на разработку крупных программных комплексов, разрабатываемых командой программистов возможно, достаточно большой. Проектирование системы в целом, создание отдельных компонентов и их объединение в конечный продукт при этом часто выполняется разными людьми, и нет ни одного специалиста, который знал бы о проекте всё. Объектно-ориентированное проектирование ориентируется на описание структуры проектируемой системы приоритетно по отношению к описанию её поведения, в отличие от функционального программирования , то есть, фактически, в ответе на два основных вопроса:. Выделение частей производится таким образом, чтобы каждая имела минимальный по объёму и точно определённый набор выполняемых функций обязанностей , и при этом взаимодействовала с другими частями как можно меньше. Дальнейшее уточнение приводит к выделению более мелких фрагментов описания. По мере детализации описания и определения ответственности выявляются данные, которые необходимо хранить, наличие близких по поведению агентов, которые становятся кандидатами на реализацию в виде классов с общими предками. После выделения компонентов и определения интерфейсов между ними реализация каждого компонента может проводиться практически независимо от остальных разумеется, при соблюдении соответствующей технологической дисциплины. Большое значение имеет правильное построение иерархии классов. Она состоит в том, что на поздних этапах разработки, когда иерархия классов построена и на её основе разработано большое количество кода, оказывается трудно или даже невозможно внести какие-либо изменения в код базовых классов иерархии от которых порождены все или многие работающие в системе классы. Даже если вносимые изменения не затронут интерфейс базового класса, изменение его поведения может непредсказуемым образом отразиться на классах-потомках. В случае крупной системы разработчик базового класса просто не в состоянии предугадать последствия изменений, он даже не знает о том, как именно базовый класс используется и от каких особенностей его поведения зависит корректность работы классов-потомков. Программная система в этой методологии представляет собой набор компонентов с хорошо определёнными интерфейсами. Изменения в существующую систему вносятся путём создания новых компонентов в дополнение или в качестве замены ранее существующих. Таким образом компонентное программирование обходит проблему хрупкости базового класса. Вместе данные и поведение представляют собой класс. Класс определяет структуру и функциональность поведение , одинаковую для всех экземпляров данного класса. В класс-ориентированных языках новый экземпляр создаётся через вызов конструктора класса возможно, с набором параметров. Получившийся экземпляр имеет структуру и поведение, жёстко заданные его классом. Гради Буч указывает [17] на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:. Несмотря на отмеченные недостатки, Буч утверждает, что выгоды от использования ООП более весомы. Кроме того, повышение производительности за счёт лучшей организации ООП-кода, по его словам, в некоторых случаях компенсирует дополнительные накладные расходы на организацию функционирования программы. Можно также заметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором. Например, упомянутое выше снижение скорости доступа к полям класса из-за использования методов доступа устраняется, если компилятор вместо вызова метода доступа использует инлайн-подстановку современные компиляторы делают это вполне уверенно. Несмотря на отдельные критические замечания в адрес ООП, в настоящее время именно эта парадигма используется в подавляющем большинстве промышленных проектов. Однако нельзя считать, что ООП является наилучшей из методик программирования во всех случаях. Если попытаться классифицировать критические высказывания в адрес ООП, можно выделить несколько аспектов критики данного подхода к программированию. Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным. Некоторые языки добавляют к указанному минимальному набору те или иные дополнительные средства. CLOS , Dylan , OCaml , Python , Ruby , Objective-C. Однако, наиболее распространены языки, включающие средства эмуляции объектной модели поверх более традиционной императивной семантики. Материал из Википедии — свободной энциклопедии. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии , проверенной 17 марта ; проверки требуют 8 правок. Пожалуйста, улучшите статью в соответствии с правилами написания статей. В этой статье или разделе имеется избыток цитат либо слишком длинные цитаты. Излишние и чрезмерно большие цитаты следует обобщить и переписать своими словами. Возможно, эти цитаты будут более уместны в Викицитатнике или в Викитеке. Информация должна быть проверяема , иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 31 декабря года. Dijkstra Программирование как вид человеческой деятельности. Типы в языках программирования. Kinds of Polymorphism, с. A calculus for overloaded functions with subtyping. В ООП программист работает с понятиями, а не с данными. Potok, Mladen Vouk, Andy Rindos. Date, Introduction to Database Systems, 6th-ed. An Interview with A. Execution in the Kingdom of Nouns. Стадии разработки Анализ требований Проектирование Программирование Тестирование. Архитектура ПО Парадигма Методология Процесс разработки Качество. Программирование Аспектно-ориентированное Объектно-ориентированное Проблемно-ориентированное. Agile Cleanroom CASE UP RUP OpenUP RAD Scrum SAFe Spotify Model MSF XP DSDM. Итеративная Каскадная Спиральная V-Model Dual Vee Model CMM CMMI Данных Function model IDEF Информационная Метамодель Object model View model UML. Кент Бек Гради Буч Фред Брукс Уорд Каннингем Оле-Йохан Даль Том Демарко Эдсгер Дейкстра Дональд Кнут Алан Кэй Мартин Фаулер Энтони Хоар Ивар Якобсон Бертран Мейер Никлаус Вирт Эдвард Йордан Стив Макконнелл Джеймс Рамбо Барри Боэм [en] Уоттс Хамфри [en] Майкл А. Джексон [en] Крэг Ларман Джеймс Мартин [en] Дэвид Парнас [en] Уинстон Ройс [en]. Пирс - Типы в языках программирования , Abadi, Cardelli - Semantics of Object Types , Cardelli - On Understanding Types , Cardelli - Typeful programming. Объектно-ориентированное программирование Парадигмы программирования. Страницы, использующие волшебные ссылки ISBN Википедия: Статьи к переработке Википедия: Статьи с излишним цитированием Википедия: Статьи без ссылок на источники с декабря года Википедия: Статьи без источников тип: Неавторитетный источник с марта Статьи с утверждениями, основанными на неавторитетном источнике Статьи со ссылками на Викиучебник Википедия: Ссылка на Викиучебник непосредственно в статье Статьи с некорректным использованием гарвардской системы цитирования. Навигация Персональные инструменты Вы не представились системе Обсуждение Вклад Создать учётную запись Войти. Пространства имён Статья Обсуждение. Просмотры Читать Текущая версия Править Править вики-текст История. В других проектах Викисклад Викиучебник. Эта страница последний раз была отредактирована 7 июля в Текст доступен по лицензии Creative Commons Attribution-ShareAlike ; в отдельных случаях могут действовать дополнительные условия. Свяжитесь с нами Политика конфиденциальности Описание Википедии Отказ от ответственности Разработчики Соглашение о cookie Мобильная версия. Императивная контрастирует с декларативной Процедурная Структурная Аспектно-ориентированная Объектно-ориентированная Агентно-ориентированная Компонентно-ориентированная Прототипно-ориентированная Обобщённое программирование Декларативная контрастирует с императивной Чистота языка Чистота функции Функциональная В терминах Рефал-машины Аппликативная Комбинаторная Бесточечная чистая конкатенативная Логическая Ограничениями Конкатенативная Векторная [en] Метапрограммирование Языково-ориентированная Предметно-ориентированная Пользователями [en] Автоматизация процесса программирования Рефлексивность Гомоиконность Связанные темы Программирование в крупном и мелком масштабе [en] Модульность Полиморфизм Продолжения и CPS Параллелизм и конкурентность Методы и алгоритмы Автоматное Динамическое Потоков данных Событийно-ориентированное Реактивное Сервис-ориентированное. Эта статья или раздел нуждается в переработке. Объектно-ориентированное программирование в Викиучебнике. Объектно-ориентированное программирование на Викискладе.


Понятие фонетической позиции
Теста рыбного пирога
Статусы для спрашивай ру со смыслом
Тюрин владимир анатольевич последние новости
Положение о бухгалтерии 2017 образец
Полезные свойства клубники
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment