- •Лекция №1-2 Тема: Объектно-ориентированный подход в программировании
- •Абстрагирование
- •Инкапсуляция
- •Наследование
- •Жизненный цикл
- •Атрибуты класса
- •Операции класса
- •Описание классов с помощью c#
- •Internal (внутренний) – компонент доступен только из классов, принадлежащих сборке, в которой определен данный класс (в том числе и самому классу).
- •Способы достижения инкапсуляции в c#
- •Конструкторы классов
Наследование
В реальном мире некоторые объекты являются расширением других объектов. Объект-потомок, в общем случае, перенимает все функциональные особенности объекта-предка и добавляет некоторые новые от себя. Например: мотоцикл и велосипед имеют много общего, но мотоцикл обладает еще и мотором. Этот принцип получил развитие и в программировании. Здесь открытый интерфейс объектов-предков также расширяется дополнительными методами в объектах потомках. На самом деле может быть расширено и внутреннее представление объекта, но этого не будет видно из-за инкапсуляции.
Преимущество наследования в том, что не нужно изобретать велосипед заново.
При создании нового класса вместо написания полностью новых компонентов можно указать, что новый класс является наследником компонентов ранее определенного базового класса (суперкласса). Этот новый класс называется производным классом (подклассом). Каждый производный класс сам является кандидатом на роль базового класса для будущих производных классов.
Производный класс обычно добавляет свои собственные компоненты, так что производный класс в общем случае больше своего базового класса. Производный класс более специфичен по своему назначению, более узок, чем его базовый класс, и представляет меньшую группу объектов. При простом наследовании предполагается, что производный класс будет выполнять примерно те же функции, что и базовый класс.
Каждый объект производного класса является также объектом соответствующего базового класса. Однако, обратное неверно: объект базового класса не является объектом классов, порожденных этим базовым классом..
Следует различать отношениями «является» (IS-A)) и «содержит» (HAS-A). «Является» — это наследование. При отношении «является» объект типа производного класса является также объектом типа базового класса. Можно рассматривать объекты базового и производного классов как подобные; их общность выражается в атрибутах и функциях базового класса. Все объекты любых классов, открыто порожденных общим базовым классом, могут рассматриваться как объекты этого базового класса.
«Содержит» — это композиция. При отношении «содержит» объект класса включает один или более объектов других классов в качестве своих элементов.
И наследование, и композиция способствуют повторному использованию кодов путем создания новых классов, которые имеют много общего с существующими классами.
Полиморфизм
Полиморфизм — это такое состояние, когда нечто одно имеет много форм. В программировании это означает, что одно имя может представлять различный код, выбранный автоматическим механизмом. С примером такого механизма вы уже ознакомились, когда изучали перегруженные функции C++.
Объектно-ориентированный анализ и проектирование
Широкое распространение методологии ООП оказало влияние на процесс разработки программ. В частности, процедурно-ориентированная декомпозиция программ уступила место объектно-ориентированной декомпозиции, при которой отдельными структурными единицами программы стали являться не процедуры и функции, а классы и объекты с соответствующими свойствами и методами. Как следствие, программа перестала быть последовательностью предопределенных на этапе кодирования действий, а стала событийно-управляемой.
Наиболее существенным обстоятельством в развитии методологии ООП явилось осознание того факта, что процесс написания программного кода может быть отделен от процесса проектирования структуры программы. Действительно, до того как начать программирование классов, их свойств и методов, необходимо определить, чем же являются сами эти классы. Более того, нужно дать ответы на такие вопросы, как: сколько и какие классы нужно определить для решения поставленной задачи, какие свойства и методы необходимы для придания классам требуемого поведения, а также установить взаимосвязи между классами.
Эта совокупность задач не столько связана с написанием кода, сколько с общим анализом требований к будущей программе, а также с анализом конкретной предметной области, для которой разрабатывается программа. Все эти обстоятельства привели к появлению специальной методологии, получившей название методологии объектно-ориентированного анализа и проектирования (ООАП).
