Тема 1 Основные принципы и этапы ООП 1 Программирование – это система методов, способов и приемов ввода, обработки и выдачи информации. С изменением технической базы, развитием языков программирования, научных принципов обработки информации видоизменялись стили программирования. 2 Парадигма (греч. Paradeigma – пример, образец) – схема, модель постановки проблем и их решения, методы исследования, господствующие в течение определенного исторического периода в научном обществе. Характерные идеи и методы программирования и соответствующий образ мышления образуют так называемую парадигму программирования. 3 Процедурный стиль Был первым стилем программирования. Основная единица программы – процедура, которая определяется так: именованная последовательность действий, выполняющая решение конкретной задачи. Аналогичная конструкция – это функция. Действия функции и процедуры реализуются по определенному алгоритму. 4 Структурный подход к программированию Алгоритмическая декомпозиция Модульность программного обеспечения Метод проектирования сверху-вниз Метод проектирование снизу-вверх Состоит из этапов нисходящего проектирования программ, структурного кодирования. Нисходящее проектирование предполагает движение от общей формулировки задачи к развитию частных решений. 5 Нисходящая разработка. Программа разбивается на программные модули, и создается многоуровневая структура. Модули нижележащих уровней реализуются постепенно и могут разрабатываться разными программистами. Те модули, которые еще не разработаны, могут заменяться «заглушками», т.е. пустыми модулями. Структурное кодирование. Программа проектируется с помощью стандартных структур – модулей, функций и процедур. 6 Алгоритмическая декомпозиция t t1 t1.1 t1.2 tn t2 t1.m tn.1 t1.k 7 Структура программы при нисходящем проектировании. Первый уровень – это программа, обеспечивающая управление решением всей задачи – основная программа. На этом уровне обычно выводится информации о программе, ее возможностях и принципах использования. На втором уровне помещаются модули, которые выполняют управление исполнением функций программы – ввод данных, способы их преобразования, форматы представления результатов. Следующие уровни описывают методы решения задачи для каждого из вариантов обработки информации. Количество функциональных уровней – любое. Оно зависит от конкретной задачи. На самом низшем уровне определяются стандартные подпрограммы, которые включаются в модули более высоких уровней. 8 Причины разбиения программных систем на модули Упрощение разработки и реализации Повышение читабельности исходных текстов Упрощение настройки и модификации Облегчение работы с данными, имеющими сложную структуру Устранение чрезмерной детализации алгоритма Более эффективное использование оперативной памяти 9 Классификация методов проектирования на основе структурного подхода Проектирование «сверху-вниз» Проектирование «снизу-вверх» 10 Проектирование «Сверху-вниз» (пошаговое уточнение) Описание спецификации всей программы в целом Определение спецификаций частей программной системы Окончательное уточнение составных частей программной системы 11 Проектирование «Снизу-вверх» Определение вспомогательных задач проектируемой системы Реализация вспомогательных задач с помощью модулей более низкого уровня Реализация основных задач программной системы, на основе вспомогательных модулей 12 Составные части программной системы в классической модели Блок ввода данных Блок обработки данных Блок вывода данных 13 классическая модель программной системы Блок ввода данных Блок Обработки данных Блок вывода данных 14 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 15 Увеличение размеров программ, расширение областей применения информационных технологий привели к созданию ООП и развитию объектных технологий. Современные системы и языки программирования базируются на понятиях класса и объекта. Необходимо подчеркнуть, что в языках ООП сохраняется алгоритмический стиль программирования, а ООП дополняет процедурное программирование благодаря возможности создавать многократно используемый код. Формальное понятие объекта, класса, свойства, события 16 Основная цель ООП – повышение эффективности разработки программ. Основное достоинство ООП – сокращение количества межмодульных вызовов и уменьшение объемов информации, передаваемой между модулями, по сравнению с модульным программированием. Это достигается за счет более полной локализации данных и интегрирования их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) программы. объектный подход предлагает новые технологические средства разработки, такие как наследование, полиморфизм, композиция, наполнение, позволяющие конструировать сложные объекты из более простых. В основу ООП положены следующие принципы: абстрагирование, ограничение доступа, модульность, иерархичность, типизация, параллелизм, устойчивость. 18 Объектно-ориентированный подход к проектированию студент Ф.И.О. Отложить стипендию сообщение копилка Монеты Положить монеты Система подготовки к каникулам 19 Принципы объектноориентированного подхода Инкапсуляция Наследование Полиморфизм Модульность Типизация Абстрагирование Ограничение доступа Иерархичность Параллелизм Устойчивость 20 Инкапсуляция Инкапсуляция – защита отдельных элементов объекта, не затрагивающих существенных характеристик объекта как целого. Объединение всех данных об объекте и характеристик его поведения (функции и процедуры) в одном блоке. Процедуры и функции в классе называются методами. Инкапсулированные данные могут оставаться недоступными для пользователя и внешней программы. 21 Применение инкапсуляции Объект интерфейс Реализация 22 Наследование Наследование – определение класса через ранее определенный класс, и создание иерархии объектов при возможности наследовать доступ ко всем ранее определенным объектам, со всеми их свойствами и методами. Позволяет расширить классы и способствует созданию родительскодочерних отношений между объектами. 23 Полиморфизм Полиморфизм – (дословно – способность проявляться во многих формах или множество форм использования) означает, что программа может обрабатывать объект по-разному в зависимости от его класса. Это достигается путем переопределения методов родительского класса в его дочерних классах. Объявление одного наименования действия, которое используется совместно всеми классами в иерархии, причем каждый класс может реализовать это действие своим образом. Класс Shape (Фигура) является базовым для классов Circle (Круг), Rectangle (Прямоугольник), Triangle(Треугольник). Принцип полиморфизма позволяет определить для всех этих классов метод Area, вычисляющий площадь фигуры. Для объекта каждого дочернего класса площадь вычисляется по-разному. 24 Абстрагирование Абстрагирование - процесс выделения абстракций в предметной области задачи. Абстракция - совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. В соответствии с определением применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом вес, в третьем - материалы, из которых он сделан, в четвертом - закон движения предмета и т.д. Современный уровень абстракции предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу некий абстрактный тип (класс). 25 Ограничение доступа Ограничение доступа - сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого. Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции: интерфейс - совокупность доступных извне элементов реализации абстракции (основные характеристики состояния и поведения); реализация - совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения). Ограничение доступа в ООП позволяет разработчику: выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций; легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов. Сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа к реализации этих свойств получило название инкапсуляции. 26 Модульность Модульность - принцип разработки программной системы, предполагающий реализацию ее в виде отдельных частей (модулей). При выполнении декомпозиции системы на модули желательно объединять логически связанные части, по возможности обеспечивая сокращение количества внешних связей между модулями. Принцип унаследован от модульного программирования, следование ему упрощает проектирование и отладку программы. 27 Модульность Модули выполняют роль физических контейнеров, в которые помещаются объекты при логическом проектировании системы Конечной целью разбиения на модули является снижение затрат на программирование, за счет независимой разработки и тестирования Реализация одного каждого модуля не должна зависеть от реализации других модулей 28 Иерархия Иерархия- ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархий при разработке программных систем. В ООП используются два вида иерархии. Иерархия «целое/часть» - показывает, что некоторые абстракции включены в рассматриваемую абстракцию как ее части, например, лампа состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования (на логическом уровне при декомпозиции предметной области на объекты, на физическом уровне - при декомпозиции системы на модули и при выделении отдельных процессов в мультипроцессной системе). Иерархия «общее/частное» - показывает, что некоторая абстракция является частным случаем другой абстракции, например, «обеденный стол - конкретный вид стола», а «столы - конкретный вид мебели». Используется при разработке структуры классов, когда сложные классы строятся на базе более простых путем добавления к ним новых характеристик и, возможно, уточнения имеющихся. 29 Иерархия Один из важнейших механизмов ООП - наследование свойств в иерархии общее/частное. Наследование - такое соотношение между абстракциями, когда одна из них использует структурную или функциональную часть другой или нескольких других абстракций (соответственно простое и множественное наследование). 30 Типизация Типизация – ограничение, накладываемое на класс объектов и препятствующее взаимозамене различных классов (или сильно сужающее возможность такой взаимозамены) В языках с жесткой типизацией для каждого программного объекта (переменной, подпрограммы, параметра и т. д.) объявляется тип, который определяет множество операций над соответствующим программным объектом. Языки программирования на основе Паскаля используют строгую, а на основе С - среднюю степень типизации. 31 Типизация Типизация – ограничение, накладываемое на класс объектов и препятствующее взаимозамене различных классов (или сильно сужающее возможность такой взаимозамены) В языках с жесткой типизацией для каждого программного объекта (переменной, подпрограммы, параметра и т. д.) объявляется тип, который определяет множество операций над соответствующим программным объектом. Языки программирования на основе Паскаля используют строгую, а на основе С - среднюю степень типизации. 32 Использование принципа типизации обеспечивает: • раннее обнаружение ошибок, связанных с недопустимыми операциями над программными объектами (ошибки обнаруживаются на этапе компиляции программы при проверке допустимости выполнения данной операции над программным объектом); • упрощение документирования; • возможность генерации более эффективного кода. 33 Виды связей в типизации Статическая Динамическая 34 Тип Тип – точное определение свойств строения или поведения, которое присуще некоторой совокупности объектов Тип может связываться с программным объектом статически (тип объекта определен на этапе компиляции - раннее связывание) и динамически (тип объекта определяется только во время выполнения программы - позднее связывание). Реализация позднего связывания в языке программирования позволяет создавать переменные - указатели на объекты, принадлежащие различным классам (полиморфные объекты), что существенно расширяет возможности языка. 35 Параллелизм Параллелизм - свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции. Существует целый ряд задач, решение которых требует одновременного выполнения некоторых последовательностей действий. К таким задачам, например, относятся задачи автоматического управления несколькими процессами. Реальный параллелизм достигается только при реализации задач такого типа на многопроцессорных системах, когда имеется возможность выполнения каждого процесса отдельным процессором. Системы с одним процессором имитируют параллелизм за счет разделения времени процессора между задачами управления различными процессами. В зависимости от типа используемой операционной системы (одно- или мультипрограммной) разделение времени может выполняться либо разрабатываемой системой (как в MS DOS), либо используемой ОС (как в системах Windows). 36 Устойчивость Устойчивость - свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан. Различают: - временные объекты, хранящие промежуточные результаты некоторых действий, например вычислений; - локальные объекты, существующие внутри подпрограмм, время жизни которых исчисляется от вызова подпрограммы до ее завершения; - глобальные объекты, существующие пока программа загружена в память; - сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы. 37 Современные языки объектноориентированного программирования C++ (прямой потомок алгоритмического языка С); Object Pascal (разработан компанией Borland на основе алгоритмического языка Pascal); Java (разработан фирмой Sun для создания сетевого ПО); JavaScript (язык сценариев Web-страниц, разработан компанией Netscape); Семейство языков платформы .NET: Visual Basic.Net, Visual C#, Visual J# 38 Визуальные среды для разработки программ (IDE – Integrated Development Environment) Visual C++; Visual Basic; Delphi; Java Предоставляют программисту инструментальные средства для автоматизированного создания программ в идеологии Windows. 39