![](/user_photo/2706_HbeT2.jpg)
- •Тематическая структура апим
- •1.2.Свойства информации.
- •Понятие количества информации
- •3.1.Системы счисления.
- •3.3.3. Преобразования чисел из двоичной в восьмеричную, шестнадцатеричную системы счисления и обратно.
- •3.4.6.Двоичное вычитание с использованием дополнительных кодов.
- •3.6.Логические операции.
- •3.6.2.Логическое умножение (конъюнкция или логическое и)
- •3.6.3.Логическое сложение (дизъюнкция или логическое или)
- •Часть II. Программное обеспечение (по, software).
- •7.2.2.Атрибуты шрифта, абзаца и страницы.
- •Точка. Этот объект на плоскости представляется двумя числами (х, у), указывающими его положение относительно начала координат.
- •Отрезок прямой. Он отличается тем, что требует для своего описания еще двух параметров — координат х1 и х2 начала и конца отрезка.
- •8.5.Фрактальная графика.
- •8.8.1.Цветовая модель rgb.
- •8.8.2.Цветовая модель cmyk.
- •8.8.3.Цветовая модель hsb.
- •8.8.4.Цветовая модель cie Lab.
- •8.9.2.3.Векторные графические редакторы.
- •9.2.3.Атрибуты ячеек, шрифта и страницы. Типы и формат данных в ячейках.
- •10.3.Типы баз данных.
- •10.4.Основные понятия реляционных бд.
- •10.8.Поиск записей. Понятие о запросе. Виды запросов и способы их организации.
- •11.3.Средства создания мультимедиа документов (обзор).
- •12.1.Компьютерные сети.
- •12.2.Топология сети.
- •12.3.Архитектура сети.
- •12.5.3.Адресация в Internet.
- •12.6.Основы технологии www.
- •12.6.1.Архитектура распределенной Web-системы.
- •6.12.2.Структурное программирование.
- •История
- •Главные понятия и разновидности
- •Основные понятия
- •Определение ооп и его основные концепции Сложности определения
- •Определение ооп
- •Концепции
- •Особенности реализации
- •Подходы к проектированию программ в целом
- •Критика ооп
- •Объектно-ориентированные языки
Подходы к проектированию программ в целом
ООП ориентировано на разработку крупных программных комплексов, разрабатываемых командой программистов (возможно, достаточно большой). Проектирование системы в целом, создание отдельных компонент и их объединение в конечный продукт при этом часто выполняется разными людьми, и нет ни одного специалиста, который знал бы о проекте всё.
Объектно-ориентированное проектирование основывается на описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:
Из каких частей состоит система.
В чём состоит ответственность каждой из частей.
Выделение частей производится таким образом, чтобы каждая имела минимальный по объёму и точно определённый набор выполняемых функций (обязанностей), и при этом взаимодействовала с другими частями как можно меньше.
Дальнейшее уточнение приводит к выделению более мелких фрагментов описания. По мере детализации описания и определения ответственности выявляются данные, которые необходимо хранить, наличие близких по поведению агентов, которые становятся кандидатами на реализацию в виде классов с общими предками. После выделения компонентов и определения интерфейсов между ними реализация каждого компонента может проводиться практически независимо от остальных (разумеется, при соблюдении соответствующей технологической дисциплины).
Большое значение имеет правильное построение иерархии классов. Одна из известных проблем больших систем, построенных по ООП-технологии — так называемая проблема хрупкости базового класса. Она состоит в том, что на поздних этапах разработки, когда иерархия классов построена и на её основе разработано большое количество кода, оказывается трудно или даже невозможно внести какие-либо изменения в код базовых классов иерархии (от которых порождены все или многие работающие в системе классы). Даже если вносимые изменения не затронут интерфейс базового класса, изменение его поведения может непредсказуемым образом отразиться на классах-потомках. В случае крупной системы разработчик базового класса не просто не в состоянии предугадать последствия изменений, он даже не знает о том, как именно базовый класс используется и от каких особенностей его поведения зависит корректность работы классов-потомков.
Критика ооп
Несмотря на отдельные критические замечания в адрес ООП, в настоящее время именно эта парадигма используется в подавляющем большинстве промышленных проектов. Однако, нельзя считать, что ООП является наилучшей из методик программирования во всех случаях.
Обычно сравнивают объектное и процедурное программирование:
Процедурное программирование лучше подходит для случаев, когда важны быстродействие и используемые программой ресурсы, но требует большего времени для разработки.
Объектное — когда важна управляемость проекта и его модифицируемость, а также скорость разработки.
Объектно-ориентированные языки
Основная статья: Объектно-ориентированный язык программирования
Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.
Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный набор синтаксических средств:
Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).
Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.
Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.
Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.
Видимо, минимальным традиционным объектно-ориентированным языком можно считать язык Оберон, который не содержит никаких других объектных средств, кроме вышеперечисленных (в исходном Обероне даже нет отдельного ключевого слова для объявления класса, а также отсутствуют явно описываемые методы, их заменяют поля процедурного типа). Но большинство языков добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе:
Конструкторы, деструкторы, финализаторы.
Свойства (аксессоры).
Индексаторы.
Интерфейсы (например, в Java используются также как альтернатива множественному наследованию - любой класс может реализовать сколько угодно интерфейсов).
Переопределение операторов для классов.
Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств — в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код — методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков — C#, Smalltalk, Java, Ruby. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++ и Delphi.