Три принципа ооп с: Шпаргалка по принципам ООП

Руководство C# | Основы объектно-ориентированного программирования

99

C# — Руководство по C# — Основы объектно-ориентированного программирования

Все основанные на объектах языки (C#, Java, С++, Smalltalk, Visual Basic и т.п.)
должны отвечать трем основным принципам объектно-ориентированного программирования (ООП), которые перечислены ниже:

Инкапсуляция

Как данный язык скрывает детали внутренней реализации объектов и предохраняет целостность данных?

Наследование

Как данный язык стимулирует многократное использование кода?

Полиморфизм

Как данный язык позволяет трактовать связанные объекты сходным образом?

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

Роль инкапсуляции

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

Т.е. инкапсуляция представляет собой способности языка скрывать излишние детали реализации от пользователя объекта.
Например, предположим, что используется класс по имени DatabaseReader, который
имеет два главных метода: Open() и Close().

Фиктивный класс DatabaseReader инкапсулирует внутренние детали нахождения,
загрузки, манипуляций и закрытия файла данных. Программистам нравится инкапсуляция, поскольку этот принцип ООП упрощает кодирование. Нет необходимости беспокоиться о многочисленных строках кода, которые работают «за кулисами», чтобы
реализовать функционирование класса DatabaseReader. Все, что потребуется — это
создать экземпляр и отправлять ему соответствующие сообщения (например, «открыть файл по имени AutoLot. mdf, расположенный на диске С:»).

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

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

Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий
данными, содержится в функциях-членах, самым типичным представителем которых
является метод. В C# метод служит в качестве аналога подпрограммы. (К числу других
функций-членов относятся свойства, события и конструкторы.) Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.

Роль наследования

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

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

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

Роль полиморфизма

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

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

Рассмотрим для примера стек, т.е. область памяти, функционирующую по принципу «последним
пришел — первым обслужен». Допустим, что в программе требуются три разных типа
стеков: один — для целых значений, другой — для значений с плавающей точкой, третий — для символьных значений. В данном примере алгоритм, реализующий все эти
стеки, остается неизменным, несмотря на то, что в них сохраняются разнотипные данные. В языке, не являющемся объектно-ориентированным, для этой цели пришлось бы
создать три разных набора стековых подпрограмм с разными именами. Но благодаря
полиморфизму для реализации всех трех типов стеков в C# достаточно создать лишь один общий набор подпрограмм. Зная, как пользоваться одним стеком, вы сумеете
воспользоваться и остальными.

В более общем смысле понятие полиморфизма нередко выражается следующим
образом: «один интерфейс — множество методов«. Это означает, что для группы взаимосвязанных действий можно разработать общий интерфейс. Полиморфизм помогает
упростить программу, позволяя использовать один и тот же интерфейс для описания
общего класса действий. Выбрать конкретное действие (т.е. метод) в каждом отдельном
случае — это задача компилятора. Программисту не нужно делать это самому. Ему достаточно запомнить и правильно использовать общий интерфейс.

Принципы ООП — Java программирование


Выделяют три принципа ООП:

  • Инкапсуляция — это свойство системы, позволяющее объединить данные и методы в классе, и скрыть детали реализации от пользователя.
  • Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. В Java класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.
  • Полиморфизм — буквально означает много форм. Это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. “Один интерфейс, множество методов”. Реализации полиморфизма в языке Java — это перегрузка и переопределение методов, интерфейсы.

Выделяют еще один четвертый принцип:

  • Абстракция данных — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые. Соответственно, абстракция — это набор всех таких характеристик.



Questions



Previous



Next


Read also:

  • Процедурное и объектно-ориентированное программирование
  • Классы и объекты
  • Конструктор
  • Ключевое слово this
  • Перегрузка
  • Стек и куча
  • Передача объектов в методы
  • Java varargs
  • Рекурсия
  • Сборщик мусора и метод finalize
  • Наследование
  • Ключевое слово super
  • Модификаторы доступа
  • Геттеры и сеттеры
  • Переопределение методов
  • Абстрактные классы и методы
  • Ключевое слово final
  • Задания


Trustpilot


Trustpilot

Три столпа объектно-ориентированного программирования (ООП), воплощенные в жизнь — Tech Elevator

Автор Tech Elevator Instructor Ben Langhinrichs

Tech Elevator предлагает языки Java и C# как часть объектно-ориентированного полного стека курс веб-разработки. Хотя мы используем эти два языка, основываясь на общем отраслевом спросе и конкретных отзывах наших партнеров по найму, большинство языков программирования сегодня являются объектно-ориентированными, поэтому эти основные принципы и навыки применимы практически ко всем работам по разработке программного обеспечения.

Но с любым очень интенсивным курсом обучения прагматические потребности создания кода, проектирования баз данных и использования множества инструментов программирования могут вытеснить любую память о больших концепциях. Следующий обзор был создан во время обзорной сессии, которую я проводил для студентов, изучающих Java и C#, в Tech Elevator, чтобы напомнить им об основных столпах объектно-ориентированного программирования. Продолжайте читать, чтобы узнать больше об объектно-ориентированном программировании и его трех основных столпах.

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

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

Фу! Даже от того, что я пишу, голова идет кругом. Студенты, изучающие программирование, слышат эти термины и изучают множество способов их использования в своем программировании, но иногда с трудом понимают, что к чему. Будем надеяться, что этот слайд поможет опустить три столпа на землю и облегчит их запоминание.

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

  1. Инкапсуляция : Это идея обернуть все, что касается конкретной вещи, будь то Текущий счет или Броненосец, в определенный объект с функциями и поведением. Как только мы это сделаем, мы можем попросить сам объект сделать то, что он должен делать, будь то внесение денег или защита себя. Но никто за пределами объекта не должен беспокоиться о том, как он выполняет свою работу. Мы просто говорим ему сделать это и заниматься своими делами. Если каждый, а под этим я подразумеваю каждый объект, просто занимается своим делом и не вмешивается в дела других объектов, все в мире хорошо.
  2. Наследование : Это идея о том, что нам не нужно определять абсолютно все об объекте снова и снова, если он имеет общие черты и поведение с другими объектами. Мы можем определить класс для счетов, а затем позволить нашему текущему счету или сберегательному счету наследовать все общее. Точно так же мы можем определить класс для животных и позволить нашему броненосцу наследовать такие функции, как количество ног и вес, а также поведение, такое как дыхание и сон. Мы называем эти всеобъемлющие классы родительскими классами, а те, которые наследуются от них, — дочерними классами. Затем мы можем наследовать от дочерних классов и так далее. Но наш текущий счет более специализирован, чем наши счета, потому что мы можем выписать чек, чего мы не можем сделать со сберегательным счетом. Наш броненосец умеет сворачиваться в клубок, но у других животных, таких как жираф, такого поведения нет. Поскольку мы идем от более общего к более специализированному, я люблю говорить, что ребенок похож на своих родителей, но гораздо более особенный.
  3. Полиморфизм : Это причудливое имя просто означает, что мы можем рассматривать один и тот же объект как разные вещи в зависимости от того, как он нам нужен в разное время, и мы можем рассматривать группы разных объектов, которые имеют общего предка или признак, как если бы они были этим предком. или черта. Таким образом, мы могли бы иметь набор различных текущих, сберегательных и кредитных счетов и попросить каждого получить баланс, чтобы мы могли выяснить, сколько мы должны потратить на отпуск в этом году. Или мы могли бы попросить группу животных Двигаться Быстро, и не заботиться о том, как Морская Свинья, Орел или Броненосец справятся с этим общим поведением. Мне нравится думать, что мы разные вещи для разных людей, поэтому, даже если не у каждого Мастера Подземелий есть супруг, который считает его или ее неприятностью, мы можем попросить любого из них организовать игру в субботу вечером.

Хотите узнать больше о программировании? Ознакомьтесь с другими бесплатными ресурсами по программированию или пройдите наш тест на пригодность, чтобы узнать, подходите ли вы для участия в учебном курсе по программированию Tech Elevator.

Узнайте, как обучить новое поколение разработчиков программного обеспечения, став инструктором Tech Elevator.

Ben Langhinrichs

Бен много лет занимается разработкой программного обеспечения на различных языках и в различных средах. В последние годы он сосредоточился на высокопроизводительных службах промежуточного программного обеспечения с использованием C++ и Java, а также на коде преобразования данных, используемом для управления крупномасштабными веб-приложениями. Бену нравится учить и вдохновлять других, чем он занимается каждый день в качестве инструктора в Tech Elevator Cleveland.

Объектно-ориентированные принципы

Объектно-ориентированные принципы

Инкапсуляция, наследование и полиморфизм обычно даются как
три фундаментальных принципа объектно-ориентированных языков (ООЛ) и
объектно-ориентированная методология.
Эти принципы в некоторой степени зависят от типа языка.

Объектно-ориентированные языки (OOL) делятся на две большие категории:

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

Некоторые OOL на основе классов (C++, Java, Scala и Eiffel) требуют, чтобы все
переменные должны быть типизированы.
Другие (Smalltalk и Ruby) этого не делают.
Типизация переменных не имеет смысла в бесклассовых OOL.

Типизация — это концепция времени компиляции.
Это позволяет компилятору сделать некоторые проверки правильности, которые
в противном случае не будет обнаружен до тех пор, пока программа не будет выполнена.

Нетипизированные OOL часто используются для прототипирования приложения.
Типизированные OOL обычно предпочтительнее для производственных приложений, потому что
проверки ошибок во время компиляции точно обнаруживают ошибки.
Если эти ошибки не обнаружены во время выполнения, их причина может быть очень
трудно определить.

Есть два важных аспекта инкапсуляции:

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

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

Современные необъектно-ориентированные языки обеспечивают несколько способов инкапсуляции.
механизмы.

  • кодовые блоки
  • подпрограммы
  • единицы компиляции

Объекты — это фундаментальный механизм инкапсуляции объектно-ориентированного
языков (ООЛ).

  • объекты — инкапсулируют данные вместе с операциями, называемыми
    методы , которые обрабатывают данные или воздействуют на них.

OOL могут предоставлять дополнительные механизмы инкапсуляции.

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

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

Для решения такого рода проблем большинство ООЛ предоставляют механизмы, которые
разрешить некоторым объектам доступ к закрытым методам другого объекта.
Одним из примеров являются вложенные классы и анонимные конструкторы Java.
C++ разрешает специальный доступ к классам, которые определены как друзья.
Эти механизмы необходимы для некоторых шаблонов проектирования.

В OOL есть два типа наследования

  • наследование интерфейса и
  • наследование реализации.

Наследование интерфейса необходимо только в типизированных OOL.
Лучше всего это становится понятно при рассмотрении дизайна на основе делегирования.
узоры.

Механизмы наследования реализации зависят от типа OOL.

  • Для основанных на классах OOL классы наследуются от классов.
  • Для бесклассовых OOL объекты наследуются от объектов.

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

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

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

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

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

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

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

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

This entry was posted in Популярное