ООП объектно-ориентированное программирование: что это простыми словами

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

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

Большой размер программы

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

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

Инкапсуляция, наследование, полиморфизм

Наследование
позволяет делать процесс написания кода более простым. В инициализаторе класса Juice присваивается значение атрибуту taste. В инициализаторе класса Drink присваиваются значения атрибутам name, price и _remains. Названия классов принято писать с прописной буквы, а объектов — со строчной. Если мы изменим какую-нибудь функцию, то остальные части кода могут быть к этому не готовы — и сломаются. Тогда придётся переписывать ещё и их, а они, в свою очередь, завязаны на другие функции.

основные принципы ооп

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

Ключевые принципы ООП

Инициализатор класса Juice с помощью функции super() вызывает другой инициализатор — родительского класса Drink. Достаточно объявить «Домашнюю кошку» наследником «Кошки» и прописать новые атрибуты и методы — вся остальная функциональность перейдёт от родителя к потомку. И последнее — мы должны позволить пользователям увеличивать возраст кота.

основные принципы ооп

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

#17 – Основи ООП. Створення класу та об’єкта

В отличие от JavaScript, в TypeScript есть такие понятия, как интерфейс и пользовательские типы. Принцип разделения интерфейса (Interface Segregation Principle) содержит правила и ограничения для того, как следует проектировать интерфейсы. Этот принцип чем-то похож на контрактное принципы ооп python программирование. Принцип подстановки Барбары Лисков (Liskov Substitution Principle) решает одну из частых ошибок проектирования — попытку полностью скопировать иерархию объектов из реального мира. Он говорит, как именно должен себя вести любой объект, который его реализует.

  • Полиморфизм – разное поведение одного и того же метода в разных классах.
  • Код становится плохим, когда он перестаёт соответствовать реальности — бизнес-логике, правилам поведения частей системы, их отношениям друг с другом.
  • Это хороший принцип, поскольку общедоступные элементы данных можно легко повредить (даже нечаянно, а не преднамеренно).
  • Но в случае с Record — достаточно объявить, какого типа эта запись будет.
  • В инициализаторе класса Drink присваиваются значения атрибутам name, price и _remains.

К динамическим атрибутам мы так обратиться не сможем. Возможности ООП поддерживает большинство популярных языков программирования, включая JavaScript, PHP, Python и другие. Наконец, когда атрибут нашелся, проверяется наличие метода __get__ (при установке – __set__, при удалении – __delete__). Ассоциированные объекты могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.

Математика и информатика: теория и методика преподавания в образовательной организации

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

Каждый верхний слой над объектом (классы) более абстрактный, чем его «младшая версия». Это позволяет не переписывать по 10 раз один и тот же объект, указывая одни и те же атрибуты и методы. Поэтому мы можем создать класс – то есть объект, способный стать базой для других объектов.

This entry was posted in IT Образование. Bookmark the permalink.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *