Советуем посмотреть на примеры того, как этот принцип можно применять в TypeScript. Следующее, на что мы обратим внимание, это почему наши траты представляются классом Record, а не, например, Spending. Когда мы подготовили основу, мы можем приступить к подсчёту суммы на день. И как мы увидим, разделение сущностей на классы помогает не запутаться и строго определить, что за что отвечает. В случае с небольшими объектами он прост для понимания, и его может быть достаточно. Но давайте попробуем продвинуться чуть дальше и написать функциональность для добавления Траты в Историю.
Это как раз основная суть взаимоотношений между классами и объектами, описанная выше. Следование принципу полиморфизма помогает обрабатывать разные типы информации с использованием одних и тех же методов. К примеру, двузначные числа и числа с плавающей точкой. Кроме того, полиморфизмом называют возможность переопределять методы в дочерних классах.
По-другому можно сказать, что объекты — это сущности, у которых есть свойства и поведение. Обычно объекты являются экземплярами какого-нибудь класса. Например, в игре может быть класс Character («Персонаж»), а его экземплярами будут hero или npc. Теперь разработчику нужно сформировать сам класс – class Employee.
Если у объектов разных классов есть одноименный метод, то коллекция таких разнородных объектов может быть обработана в одном цикле. Объекты разных классов, с разной внутренней реализацией, то есть программным кодом, могут иметь “одинаковые” методы. На самом деле у методов совпадают только имена, а вложенный в них код (то, что https://deveducation.com/ они делают) различен. Вот и получается, что у одного имени как бы множество форм. Даже программируя в рамках структурной парадигмы, вы все равно пользуетесь объектами и классами, пусть даже встроенными в язык, а не созданными лично вами. Наследование позволяет одному классу получать данные и поведение от другого класса.
![что такое объектно ориентированное программирование](https://deveducation.com/wp-content/uploads/2022/11/816cfcf8-d10e-4203-b5bc-d9a1ab237cb4-1024x683.webp)
Это первая статья из серии, посвящённой объектно-ориентированному программированию. Она предназначена для тех, кто хочет понять суть этой парадигмы разработки, а не просто научиться использовать классы и объекты. Речь идет о части кода, описывающей элемент с определенными характеристиками и функциями. К примеру, объектами являются карточки товаров в каталоге интернет-магазина, кнопка «заказать» и т.д. Существуют классические объектно-ориентированные языки как Java или C#.
Сущности
В отличие от JavaScript, в TypeScript есть такие понятия, как интерфейс и пользовательские типы. В JavaScript это сделать непросто, потому что в языке просто нет для этого инструментов. Этот принцип чем-то похож на контрактное программирование. Мы не будем сильно углубляться в детали каждого, рассмотрим лишь основные положения. Он говорит, как именно должен себя вести любой объект, который его реализует. В целом мы, конечно, здесь немного отступаем от канонов ООП, потому что по-хорошему Record должен быть не классом, а интерфейсом.
Яркий пример – разделение на живую и неживую природу. Можно создавать классы и объекты, которые похожи друг на друга, но немного отличаются — имеют дополнительные атрибуты и методы. Более общее понятие в таком случае становится «родителем», а более специфичное и подробное — «наследником». Набор атрибутов и методов, доступный извне, работает как интерфейс для доступа к объекту. Через них к нему могут обращаться другие структуры данных, причем им не обязательно знать, как именно объект устроен внутри.
![что такое объектно ориентированное программирование](https://deveducation.com/wp-content/uploads/2022/11/d9cb9f29-3500-4d5f-b261-c5fa22315744-1024x738.webp)
Совокупность подобных характеристик можно назвать шаблоном человека или классом. Конкретное воплощение этого шаблона может отличаться, например, одни люди имеют одно имя, другие – другое имя. И реально существующий человек (фактически экземпляр данного класса) будет представлять объект этого класса.
Доступ к данным объекта должен контролироваться, чтобы пользователь не мог изменить их в произвольном порядке и что-то поломать. Поэтому для работы с данными программисты пишут публичные методы, которые составляют интерфейс объекта. Для наглядности они будут связаны одно из основополагающих понятий объектно-ориентированного с разработкой игр, потому что именно в играх (хотя далеко не только в них) активно используются объекты. Для создания метода, который будет иметь доступ к объекту и сможет редактировать содержащуюся в нем информацию, потребуется ввести ключевое слово this.
Теперь можно приступить к работе с поведением объектов. Оно реализуется с помощью методов — специальных блоков кода, которые позволяют избежать повторений в проекте. Затем в коде следует ключевое слово class, которое говорит о том, что нужно создать класс с определённым именем. Используя эти свойства и методы, можно значительно ускорить разработку, сделать код более читаемым. К тому же самому программисту проще составлять код, если он думает с помощью объектов.
В этом же месте потребуется создать еще одну папку для класса – courses. Там будет размещен первый файл для PHP ООП класса (Employee). Затем он должен быть подключен в файле index с помощью команды require_once для последующего применения.
Объекты И Классы
Это похоже на то, как создаются переменные, но вместо типа данных указывается название класса. После знака присваивания указываются ключевое слово new и конструктор — специальный метод, который позволяет создать объект (о нём читайте в блоке о методах). Данный подход в написании кода на языке PHP (ООП PHP) широко применяется в процедурном программировании. Однако, соответствуя принципам ООП PHP, разработчик может сформировать более читабельный код, который будет восприниматься гораздо проще. В практике PHP ООП применяются различные среды разработки, привычные девелоперу.
Последние наследуют от A поле-переменную field1 и метод make_str, который потом переопределяют. В Python нет такой инкапсуляции, хотя она является одним из стандартов ООП. В Python можно получить доступ к любому атрибуту объекта и изменить его. Однако в Питоне есть механизм, позволяющий имитировать сокрытие данных, если это так уж необходимо. Если мы возьмем конкретный стол, то это объект, но не класс. А вот общее представление о столах, их назначении – это класс.
![что такое объектно ориентированное программирование](https://deveducation.com/wp-content/uploads/2022/10/b7a2c75a-7d3f-40b1-a1bf-4e363d0f7a74-1024x496.webp)
Таким образом, такая простая в понимании игра требует создания нескольких моделей – модель фигуры, модель стакана, модель движения фигуры в стакане и так далее. Все эти модели являются абстракциями, представленными вычислениями в компьютере. Для описания таких моделей применяют понятие абстрактный тип данных, АТД (или сложный тип данных). Вместо прямого доступа класс предоставляет специальные методы установки и получения значения полей.
Такие методы доступа могут защитить от присвоения полям недопустимых значений. Взаимодействие с объектами, а не логикой упрощает понимание кода. Для модификации не нужно погружаться в то, как построено ПО. Благодаря полиморфизму можно быстро адаптировать код под требования задачи, не описывая новые объекты и функции. Наследование позволяет реализовывать сложные схемы с четкой иерархией «от общего к частному».
Объектно-ориентированное программирование – это подход, при котором вся программа рассматривается как набор взаимодействующих друг с другом объектов. Это не является обязательным – мы можем пользоваться только встроенными объектами. Однако ООП полезно при долгосрочной разработке программы несколькими людьми, так как упрощает понимание кода. Программист может написать свой тип данных (класс), определить в нём свои методы.
У нас у всех есть некоторое представление о человеке, у которого есть имя, возраст, какие-то другие характеристики. То есть некоторый шаблон – этот шаблон можно назвать классом. Конкретное воплощение этого шаблона может отличаться, например, одни люди имеют одно имя, другие – другое имя. И реально существующий человек будет представлять объект или экземпляр этого класса. Зарплату сотрудника знает он сам, его руководитель и бухгалтер, остальные — нет. Какие свойства и поведение будет доступно другим объектам обычно определяется на уровне класса.
- От каждого класса мы создаем по одному объекту и присваиваем их переменным a, b, c.
- Через точку мы можем обратиться к его переменным и функциям.
- Тем не менее даже к инкапсулированному состоянию может потребоваться доступ.
- Однако в первую очередь программисту нужно изучить концепции и принципы ООП.
- Класс представляет составной тип, который может использовать другие типы.
Когда мы работаем в парадигме ООП, наши сущности представляются в коде объектами. Каждый объект может посылать и принимать сообщения, а также реагировать на них. Внутреннее устройство влияет на то, как данные извне будут использоваться и преобразовываться внутри. Как одна часть программы будет «разговаривать» с другими, что они друг другу будут пересылать.
При помощи специальной конструкции разработчик берет те или иные атрибуты или методы из класса. Затем он их редактирует либо оставляет в исходном виде. Далее разработчик формирует с помощью этих атрибутов/методов уникальный объект или подкласс, чтобы перейти к этапу наследования опций. Принципами объектно-ориентированного программирования являются полиморфизм, абстракция, наследование и инкапсуляция. Они используются во многих популярных языках — C++, Python, PHP, JS, Java. Язык MQL4 является С++ подобным, и в нем также реализован механизм инкапсуляции для реализации АТД.
Объектно-ориентированное программирование (ООП) — это подход, при котором программа рассматривается как набор объектов, взаимодействующих друг с другом. Если постараться объяснить простыми словами, то ООП ускоряет написание кода и делает его более читаемым. В языке программирования Python объекты принято называть также экземплярами. Это связано с тем, что в нем все классы сами являются объектами класса sort.
Необходимо поставить фигурные скобки и описать внутри них тело класса. Речь идет о свойствах (name, age, cellphone number) и методах. Для инкапсуляции этой информации потребуется определить их свойства как non-public.