Web-studio46.ru

Обучение и образование
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Объектно ориентированное программирование лекции

Основы объектно-ориентированного программирования

Методология процедурно-ориентированного программирования

Появление первых электронных вычислительных машин, или компьютеров, ознаменовало новый этап в развитии техники вычислений. Казалось, достаточно разработать последовательность элементарных действий, каждое из которых можно преобразовать в понятные компьютеру инструкции, и любая вычислительная задача будет решена. Эта идея оказалась настолько жизнеспособной, что долгое время доминировала над всем процессом разработки программ. Появились специализированные языки программирования, созданные для разработки программ, предназначенных для решения вычислительных задач. Примерами таких языков могут служить FOCAL (FOrmula CALculator) и FORTRAN (FORmula TRANslator).

Основой такой методологии разработки программ являлась процедурная, или алгоритмическая , организация структуры программного кода. Это было настолько естественно для решения вычислительных задач, что целесообразность такого подхода ни у кого не вызывала сомнений. Исходным в данной методологии было понятие алгоритма. Алгоритм — это способ решения вычислительных и других задач, точно описывающий определенную последовательность действий, которые необходимо выполнить для достижения заданной цели. Примерами алгоритмов являются хорошо известные правила нахождения корней квадратного уравнения или системы линейных уравнений.

При увеличении объемов программ для упрощения их разработки появилась необходимость разбивать большие задачи на подзадачи. В языках программирования возникло и закрепилось новое понятие процедуры. Использование процедур позволило разбивать большие задачи на подзадачи и таким образом упростило написание больших программ. Кроме того, процедурный подход позволил уменьшить объем программного кода за счет написания часто используемых кусков кода в виде процедур и их применения в различных частях программы.

Как и алгоритм , процедура представляет собой законченную последовательность действий или операций, направленных на решение отдельной задачи. В языках программирования появилась специальная синтаксическая конструкция, которая также получила название процедуры. Например, на языке Pascal описание процедуры выглядит следующим образом:

Назначение данной процедуры — вывести на экран приветствие Hello, Name , где Name передается в процедуру в качестве входного параметра.

Со временем вычислительные задачи становились все сложнее, а значит, и решающие их программы увеличивались в размерах. Их разработка превратилась в серьезную проблему. Когда программа становится все больше, ее приходится разделять на все более мелкие фрагменты. Основой для такого разбиения как раз и стала процедурная декомпозиция , при которой отдельные части программы, или модули, представляли собой совокупность процедур для решения одной или нескольких задач. Одна из основных особенностей процедурного программирования заключается в том, что оно позволило создавать библиотеки подпрограмм (процедур), которые можно было бы использовать повторно в различных проектах или в рамках одного проекта. При процедурном подходе для визуального представления алгоритма выполнения программы применяется так называемая блок-схема . Соответствующая система графических обозначений была зафиксирована в ГОСТ 19.701-90. Пример блок-схемы изображен на рисунке (рис. 2.1).

Появление и интенсивное использование условных операторов и оператора безусловного перехода стало предметом острых дискуссий среди специалистов по программированию. Дело в том, что бесконтрольное применение в программе оператора безусловного перехода goto может заметно осложнить понимание кода. Такие запутанные программы сравнивали с порцией спагетти ( bowl of spaghetti), имея в виду многочисленные переходы от одного фрагмента программы к другому, или, что еще хуже, возврат от конечных операторов программы к начальным. Ситуация казалась настолько драматичной, что многие предлагали исключить оператор goto из языков программирования. Именно с этого времени отсутствие безусловных переходов стали считать хорошим стилем программирования.

Дальнейшее увеличение программных систем способствовало формированию новой точки зрения на процесс разработки программ и написания программных кодов, которая получила название методологии структурного программирования. Ее основой является процедурная декомпозиция предметной области решаемой задачи и организация отдельных модулей в виде совокупности процедур. В рамках этой методологии получило развитие нисходящее проектирование программ, или проектирование «сверху вниз». Пик популярности идей структурного программирования приходится на конец 70-х — начало 80-х годов.

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

Методология объектно-ориентированного программирования

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

Но не менее важными оказались качественные изменения, связанные со смещением акцента использования компьютеров. В эпоху «больших машин» основными потребителями программного обеспечения были такие крупные заказчики, как большие производственные предприятия, финансовые компании, государственные учреждения. Стоимость таких вычислительных устройств для небольших предприятий и организаций была слишком высока.

Позже появились персональные компьютеры, которые имели гораздо меньшую стоимость и были значительно компактнее. Это позволило широко использовать их в малом и среднем бизнесе. Основными задачами в этой области являются обработка данных и манипулирование ими, поэтому вычислительные и расчетно-алгоритмические задачи с появлением персональных компьютеров отошли на второй план. Как показала практика, традиционные методы процедурного программирования не способны справиться ни с нарастающей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Ею стало объектно-ориентированное программирование ( ООП ).

Читать еще:  Сайт для учебы программирования

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

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

Модель содержит не все признаки и свойства представляемого ею предмета или понятия, а только те, которые существенны для разрабатываемой программной системы. Таким образом, модель «беднее», а следовательно, проще представляемого ею предмета или понятия.

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

Объектно-ориентированный подход обладает такими преимуществами, как:

  • уменьшение сложности программного обеспечения;
  • повышение надежности программного обеспечения;
  • обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;
  • обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Более детально преимущества и недостатки объектно-ориентированного программирования будут рассмотрены в конце лекции, так как для их понимания необходимо знание основных понятий и положений ООП .

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

Лекция 2: Объектно-ориентированное программирование

Коротко об истории вопроса. ООП полностью понимают всего несколько человек в мире, но, в отличие от теории относительности, каждый по своему.

ООАнализ — ООДизайн — ООПроектирование

ООПрограммирование — кодирование на ОО-языке.

С точки зрения объектно-ориентированного подхода объект — нечто, обладающее значением (состоянием), типом (поведением) и индивидуальностью. Когда мы выделяем объекты, мы обычно абстрагируемся (отвлекаемся) от большинства их свойств, концентрируясь на существенных для нашей задачи свойствах.

Абстракция

Когда мы выделяем объекты, мы обычно абстрагируемся (отвлекаемся) от большинства их свойств, концентрируясь на существенных для нашей задачи свойствах. Абстрагирование — один из ключевых принципов объектно-ориентированного подхода:

Класс — множество объектов, имеющих общую структуру и поведение.

Экземпляры класса — объекты. Объект-класс записывается в программе на Python с помощью ключевого слова class.

Путь «сокрытия данных»: функции, модули, объекты (эволюция к более целостным структурам от менее целостных, от менее связных к более связным)

Инкапсуляция. Общедоступные, защищенные и приватные методы (В Python-объектах все атрибуты по умолчанию общедоступны. Приватные методы можно получить, если имя атрибута на два подчеркивания):

Одна и та же функция может работать с разными типами данных. Например, len() одинаково хорошо работает со списками, с классом:

Это называется Полиморфизм («многоформие»). В Python имеет место т.н. Сигнатурный полиморфизм. То есть, чтобы принадлежать некоторому типу объект должен иметь определенный набор атрибутов и аргументов/результатов этих методов. Выше был описан класс, Роль которого — иметь длину.

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

Получение одних классов (объектов) от других:

Порождающие функции (функции-фабрики)

Наследование. Множественное наследование. Mix-in

Один класс наследует все атрибуты другого (других) классов. Пример:

Mix-in (смесь) — класс-химера, состоящий из непересекающихся наборов атрибутов с помощью множественного наследования. Обычно используется в GUI-объектах или в сетевых агентах. Не злоупотреблять!

Агрегация

Возможность помещать одни объекты в другие. Если основной задачей объекта является хранение (и манипуляция) другими объектами, он называется Контейнером.

Объекты Python «живы» пока работает программа-интерпретатор. Чтобы сохранить объекты после этого времени (то есть, получить Устойчивые объекты) необходима Сериализация объектов. Она возможна, например, с помощью встроенного модуля pickle.

Кстати, структуру (Си) или запись (Паскаля) легко эмулировать пустым классом:

Кстати-2, Python — очень динамический язык. В нем можно добавлять атрибуты к объекту/классу по ходу исполнения программы!

Лекция 2. Объектно-ориентированное программирование;

Лекция 1. Цели и задачи дисциплины

Лэ

Лэ, или лейх (фр. lai, lay, нем. Leich, от Laiks, Laik — танец, игра) — один из главных жанров средневековой лирики на народном языке. По форме это — крупное, нерефренное многострофное произведение (до 300 строк), соединяющее сквозной принцип сцепления различных по стиховой структуре и мелодике строф с принципом периодической музыкальной повторности каждой из строф:

Читать еще:  Как программировать в excel

строфы AB CD EF.

муз. разделы AA1 ВВ1 CC1 .

У Машо сложилась форма лэ из 24 строф, или из 12 двойных строф, замыкающихся повторением стихотворной структуры первой пары строф, и точным, либо транспонированным повторением музыки. Внутри двойных строф возникают функциональные соотношения открытых и закрытых каденций.

Целью дисциплины «Технологии программирование» является изучение объектно-ориентированной технологии программирования, ознакомление студентов с новейшими направления в области создания технологий программирования, законами эволюции программного обеспечения, технологией быстрой разработки приложений, изучение инструментальных средств и технологии объектно-ориентированного программирования (ООП), методов программирование на языке С++/С#. Конечная цель изучения дисциплины — формирование у будущих специалистов твердых теоретических знаний и практических навыков по составлению программ с использованием объектно-ориентированной методологии программирования, подготовке и представлению подпрограмм, различным пользователям для выработки, обоснования и принятия решений в области разработки современных программных продуктов. Освоение концепций и понятий объектно-ориентированного подхода, включая способы их выражения на языке программирования С++/С#.

В ходе изучения дисциплины «Технологии программирование» ставятся следующие задачи:

— приобретение системы знаний об объектно-ориентированной методологии программировании как одной из основных методологий разработки программ, позволяющей разрабатывать современные программные продукты;

— организации информационной системы для широкого круга внутренних и внешних пользователей;

— формирование и представление информации, удовлетворяющей требованиям различных пользователей программного обеспечения.

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

Понятие объекта в программе совпадает с обыденным смыслом этого слова: объ­ект представляется как совокупность данных, характеризующих его состояние, и функций их обработки, моделирующих его поведение. Вызов функции на выпол­нение часто называют посылкой сообщения объекту.

При создании объектно-ориентированной программы предметная область пред­ставляется в виде совокупности объектов. Выполнение программы состоит в том, что объекты обмениваются сообщениями. Это позволяет использовать при про­граммировании понятия, более адекватно отражающие предметную область.

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

Важным свойством объекта является его обособленность. Детали реализации объ­екта, то есть внутренние структуры данных и алгоритмы их обработки, скрыты от пользователя объекта и недоступны для непреднамеренных изменений. Объект используется через его интерфейс — совокупность правил доступа.

Скрытие деталей реализации называется инкапсуляцией (от слова «капсула»). Ничего сложного в этом понятии нет: ведь и в обычной жизни мы пользуемся объектами через их интерфейсы. Сколько информации пришлось бы держать в голове, если бы для просмотра новостей надо было знать устройство телевизора!

Таким образом, объект является «черным ящиком», замкнутым по отношению к внешнему миру. Это позволяет представить программу в укрупненном виде — на уровне объектов и их взаимосвязей, а следовательно, управлять большим объ­емом информации и успешно отлаживать сложные программы.

Сказанное можно сформулировать более кратко и строго: объект — это инкапсу­лированная абстракция с четко определенным интерфейсом.

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

Кроме того, инкапсуляция позволяет использовать объект в другом окружении и быть уверенным, что он не испортит не принадлежащие ему области памяти, а также создавать библиотеки объектов для применения во многих программах.

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

Наследование является мощнейшим инструментом ООП и применяется для сле­дующих взаимосвязанных целей:

исключения из программы повторяющихся фрагментов кода;

упрощения модификации программы;

упрощения создания новых программ на основе существующих.

Кроме того, только благодаря наследованию появляется возможность использо­вать объекты, исходный код которых недоступен, но в которые требуется внести изменения.

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

Читать еще:  Паскаль язык программирования изучение

Объект, на основании которого строится новый объект, называется родительским объектом, объектом-предком, базовым классом, или суперклассом, а унаследо­ванный от него объект — потомком, подклассом, или производным классом.

ООП позволяет писать гибкие, расширяемые и читабельные программы. Во мно­гом это обеспечивается благодаря полиморфизму, под которым понимается воз­можность во время выполнения программы с помощью одного и того же имени выполнять разные действия или обращаться к объектам разного типа. Чаще все­го понятие полиморфизма связывают с механизмом виртуальных методов.

Подводя итог сказанному, сформулирую достоинства ООП.

использование при программировании понятий, близких к предметной области;

возможность успешно управлять большими объемами исходного кода благо­даря инкапсуляции, то есть скрытию деталей реализации объектов и упроще­нию структуры программы;

возможность многократного использования кода за счет наследования;

сравнительно простая возможность модификации программ;

возможность создания и использования библиотек объектов.

Эти преимущества особенно явно проявляются при разработке программ большого объема и классов программ. Однако ничто не дается даром: создание объектно-­ориентированной программы представляет собой весьма непростую задачу, по­скольку требует разработки иерархии объектов, а плохо спроектированная иерар­хия может свести к нулю все преимущества объектно-ориентированного подхода.

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

Объектно-ориентированное программирование (ООП-1)

Другим фундаментальным понятием является класс.

Следующими важнейшими принципами ООП являются наследование и полиморфизм.

Другим важнейшим принципом ООП является модульность.

Развитием объектно-орниентированной парадигмы (методологии), стала объектно-событийная парадигма, опирающаяся на понятия объекта и события. Эта парадигма позволяет конструировать, программировать распределенные вычислительные среды, в том числе среды реального времени, SCADA и пр.

  • метка — уникальный идентификатор события.
  • значение — текстовое сообщение о сути произошедшего.
  • предназначение — модель событий, которая принимает событие.
  • данные — данные, которые переносятся от одного объекта к другому.

Первый ряд примеров событий доставляет собственно сам жизненный цикл объекта:

  • создание объекта;
  • уничтожение объекта.

Более сложные примеры событий возникают тогда, когда у объекта появляются внутренние состояния, которые описываются соответствующей диаграммой переходов (из одного состояния в другое).

Современными языками объектно-ориентированного программирования являются С++ и Java. С середины 90-х годов многие объектно–ориентированные языки реализуются как системы визуального программирования, в которых интерфейсная часть программного продукта создается в диалоговом режиме, практически без написания программных операторов. К объектно – ориентированным системам визуального проектирования относятся Visual Basic, Delphi, C++ Builder, Visual C++. Язык VBA (Visual Basic for Applications) – язык приложений Microsoft Office (Excel, Word, Access, Power Point и др). VBA соблюдает основной синтаксис языка и правила программирования языков Basic – диалектов, позволяет создавать макросы для автоматизации выполнения некоторых операций и графический интерфейс пользователя, интеграцию между различными программными продуктами.

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

Лабораторные работы

Литература

  1. Бруно Бабэ. Просто и ясно о Borland C++: Версии 4.0 и 4.5/ Пер. с англ. -М.:БИНОМ, 1994. — 400с.
  2. Буч Г. «Объектно-ориентированный анализ и проектирование с примерами приложений на С++» Пер. с англ. — М.: Бином; СПб.: Невский диалект, 1999.
  3. Введение в объектно-ориентированное программирование. — М, 2000 [pdf]
  4. Гайсарян С.С. «Объектно-ориентированное проектирование» (http://www.mista.ru/oop_book/index.htm)
  5. Жуков А. «Изучаем С» — СПб.: Питер, 2003.
  6. Использование Adobe Flash Professional CS5 — Adobe Systems, 2010. [pdf]
  7. Ишкова Э. «С++ начала программирования» — М.: Бином, 2001.
  8. Клочков Д.П., Павлов Д.А. Введение в объектно-ориентированное программирование. / Учебно-методическое пособие. — Изд. Нижегор. ун-та, 1995. — 70с.
  9. Легалов А. «Итоги экспансии объектно-ориентированной парадигмы» (http://www.softcraft.ru/paradigm/process/pr01.shtml
  10. Мухортов В.В., Рылов В.Ю. Объектно-ориентированное программирование, анализ и дизайн (методическое пособие) — ИМСО РАН, Новосибирск, 2002
  11. Немнюгин С., Перколаб Л. «Изучаем TurboPascal
  12. Плискин М. «Эволюция языков программирования» (://2..cctpu../edu///lang/_09.)
  13. Объектно-ориентированный подход к программированию. — МИФИ, 2003 [pdf]
  14. Объектно-ориентированная методология программирования (http://www.math.rsu.ru/smalltalk/sml-a.ru.html)
  15. Объектно-ориентированные системы: состояние и перспективы. Аналитический обзор по материалам фирмы OVUM. Обзор подготовил А.Г. Иванов. (http://www.math.rsu.ru/smalltalk/obzornew.ru.html)
  16. Объектно-ориентированные языки программирования. Сравнение с традиционными языками (://.suvvbcourse/1.)
  17. Патрикеев Ю.Н. «Объектно-ориентированное проектирование» (http://www.object.newmail.ru/oop1.html)
  18. Патрикеев Ю.Н. «Объектно-ориентированное программирование на Borland C++» (http://www.object.newmail.ru/obj0.html)
  19. Принципы объектно-ориентированного программирования – Лекции по системе визуального объектно-ориентированного проектирования Delphi — Лекции (http://blackman.wp-club.net/lection/visualprg.php)
  20. Стили программирования (http://media.karelia.ru/

ftt/IVK/new2/Inflect/T_1_16.htm)

  • Страуструп Б. Язык программирования С++ (2-ред)./Пер. с англ.-М.: Радио и связь, 1995. — 352с.
  • Структура экрана в среде (://../distant//_2.
  • Шилдт Герберт. Самоучитель С++ (2-ред)./Пер. с англ.-СПб.: BHV-Санкт-Петербург, 1997.-512с. (+дискета с примерами)
  • Элиас М., Страуструп Б. Справочное руководство по языку С++ с комментариями. /Пер. с англ. -М.:Мир, 1992.- с.
  • Ссылка на основную публикацию
    Adblock
    detector