Разное

Ооп принципы java: Принципы ООП на примере языка программирования Java

Принципы объектно-ориентированного программирования / Хабр

Привет, Хабр! Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Специально к старту занятий в новом потоке курса «Архитектура и шаблоны проектирования» я подготовил еще один авторский материал.



Введение

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

Вообще устроено все следующим образом: есть само объектно-ориентированное программирование. У него есть принципы. Из принципов объектно-ориентированного программирования следуют разобранные нам шаблоны GRASP (как вариант — SOLID принципы), из которых, в свою очередь, следуют шаблоны GoF. Из них же следует ряд интересных вещей, например, enterprise паттерны.

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

Определение гласит, что «Объектно-ориентированное программирование – это парадигма программирования, в которой основной концепцией является понятие объекта, который отождествляется с предметной областью.»

Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).

Состояние объекта — это набор всех его полей и их значений.

Поведение объекта — это набор всех методов класса объекта.

Идентичность объекта — это то, что отличает один объект класса от другого объекта класса. С точки зрения Java, именно по идентичности определяется метод equals.

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

Объектно-ориентированное программирование обладает рядом принципов. Представление об их количестве расходится. Кто-то утверждает, что их три (старая школа программистов), кто-то, что их четыре (новая школа программистов):

  1. Абстрация
  2. Инкапсуляция
  3. Наследование
  4. Полиморфизм

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

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

Вопреки мнению многих собеседующихся (а иногда и собеседуемых), инкапсуляция это не «когда все поля приватные». Инкапсуляция является фундаментальнейшим принципом проектирования ПО, ее следы наблюдаются на только на уровне микро-, но и на уровне макропроектирования.

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

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

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

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

Наследование — это возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (суперкласса), добавляя при необходимости новые свойства и
методы.

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

Полиморфизм

Полиморфизм — это возможность использовать классы – потомки в контексте, который был предназначен для класса – предка.

За самым садистским определением кроется возможность языка программирования для декомпозиции задачи и рефакторинга if’ов и switch’ей.

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

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

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

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

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

Questions

Previous

Next

Read also:

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

Trustpilot

Trustpilot

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

❮ Предыдущий Далее ❯


Java — Что такое ООП?

ООП означает объектно-ориентированное программирование .

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

Объектно-ориентированное программирование имеет ряд преимуществ перед процедурным программирование:

  • ООП быстрее и проще в исполнении
  • ООП обеспечивает четкую структуру для программ
  • ООП помогает сохранить код Java СУХИМ «Не повторяйтесь» и делает в код легче поддерживать, изменять и отлаживать
  • ООП позволяет создавать полноценные многоразовые приложения с меньшим количеством кода и меньшим временем разработки

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


Java — что такое классы и объекты?

Классы и объекты — два основных аспекта объектно-ориентированного программирования.

Посмотрите на следующую иллюстрацию, чтобы увидеть разницу между классом и objects:

class

Fruit

objects

Apple

Banana

Mango

Another example:

class

Car

objects

Volvo

Audi

Toyota

Итак, класс — это шаблон для объектов, а объект — экземпляр класса.

При создании отдельных объектов они наследуют все переменные и методы из класса.

В следующей главе вы узнаете гораздо больше о классах и объектах.


❮ Предыдущий Следующий ❯


ВЫБОР ЦВЕТА



Лучшие учебники
Учебное пособие по HTML
Учебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

Лучшие ссылки
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3. CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Лучшие примеры
0073 Примеры HTML

Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery

| О

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

Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.

Концепции OOPS в Java с примерами в реальном времени

В этой статье мы изучим важные концепции ООП в Java на реальных примерах.

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

Основные концепции ООП:

  1. Объект
  2. Класс
  3. Абстракция
  4. Инкапсуляция
  5. Наследство
  6. Полиморфизм

Давайте обсудим выше каждую концепцию ООП на реальном примере.

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

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

Я нашел различные определения объектов:

1. Объект — это сущность реального мира.

2. Объект является сущностью времени выполнения.

3. Объект — это сущность, которая имеет состояние и поведение.

4. Объект является экземпляром класса.

Реальные примеры

  • Собаки имеют состояние (имя, окрас, порода, голодность) и поведение (лай, подтягивание, виляние хвостом). Стул, Велосипед, Маркер, Ручка, Стол, Автомобиль, Книга, Яблоко, Сумка и т. д. Это может быть физическое или логическое (материальное и нематериальное).

  • У велосипедов также есть состояние (текущая передача, текущая частота вращения педалей, текущая скорость) и поведение (переключение передач, изменение частоты вращения педалей, торможение).

Узнайте больше об объектах в Java с примерами в разделе Что такое объекты в Java с примерами программирования.

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

Узнайте больше о классе в Java с примерами в разделе Что такое класс в Java с примерами программирования.

Реальный пример: Circle . Давайте рассмотрим пример класса и проанализируем его различные части на диаграмме ниже. В этом примере объявляется класс Circle , который имеет переменные-члены x, y и radius типа Integer и два метода-члена: area() и fillColor().

Класс представляет собой шаблон для создания объектов

На приведенной ниже схеме показан Класс Circle , который является шаблоном для создания трех объектов:

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

Примеры из реальной жизни

  1. Пример 1: Рассмотрим автомобиль , , который абстрагирует внутренние детали и предоставляет водителю только те детали, которые относятся к взаимодействию водителя с автомобилем .
  2. Пример 2: Рассмотрим банкомат ; Все они выполняют операции в банкомате, такие как снятие наличных, перевод денег, получение мини-выписки и т. д. но мы не можем знать внутренние подробности о банкомате.
Узнайте больше об абстракции в Java с примерами в разделе Абстракция в Java с примерами.

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

В ООП данные и методы, работающие с этими данными, объединяются в единое целое, называемое классом.

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

Реальные примеры

  1. Капсула , в нее завернуты разные лекарства. В капсуле все лекарство заключено внутри капсулы.
  2. Класс Java является примером инкапсуляции. Java bean — это полностью инкапсулированный класс, потому что все данные-члены здесь закрыты.
    Дополнительные сведения см. в разделе Инкапсуляция в Java с примером

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

Наследование — ЯВЛЯЕТСЯ отношением между суперклассом и его подклассами.

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

Пример из реальной жизни

  1. Реальным примером наследования являются ребенок и родители, все имущество отца наследуется его сыном.

  2. В библиотеке Java вы можете увидеть широкое использование наследования. На рисунке ниже показана частичная иерархия наследования из библиотеки java.lang . Класс Number абстрагирует различные числовые (справочные) типы, такие как Byte, Integer, Float, Double, Short и BigDecimal.

Узнайте больше о наследовании при наследовании в Java на примере.

Процесс представления одной формы в нескольких формах известен как Полиморфизм 9.0192 .

Различные определения полиморфизма:

  1. Полиморфизм позволяет нам выполнять одно и то же действие разными способами.
  2. Полиморфизм позволяет определить один интерфейс и иметь несколько реализаций
  3. Мы можем создавать функции или ссылочные переменные, которые ведут себя по-разному в другом программном контексте.
  4. Полиморфизм означает множество форм.

Реальный пример полиморфизма

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


Подробнее см. Полиморфизм в Java с примером.

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

  • Ассоциация
  • Состав
  • Агрегация
  • Делегация
  • Муфта
  • Сплоченность

Intent

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

  • Ассоциация — это отношение между двумя отдельными классами, которое устанавливается через их Объекты. Ассоциация может быть «один к одному», «один ко многим», «многие к одному», «многие ко многим».

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

Существуют две формы ассоциации

  • Состав
  • Агрегация
Подробнее об ассоциации в Java на примере

Намерение

Композиция — это ассоциация, представляющая часть связи в целом, где часть не может существовать без целого. Если удаляется целое, то удаляются все части. У него более прочная связь. Ключевые моменты

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

Intent

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

.

Намерение
  • Передать ответственность за конкретную задачу другому классу или методу.
  • Это метод, при котором объект выражает определенное поведение вовне, но на самом деле делегирует ответственность за реализацию этого поведения связанному объекту

Применимость

Использовать делегирование для достижения следующего

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

. Намерение

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

Ключевые точки

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

Intent

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *