Вступление
В этой серии постов мы собираемся изучить объектно-ориентированное программирование. Мы начнем с нескольких основных концепций, а затем будем опираться на них, пытаясь все больше и больше углубляться в глубины объектно-ориентированного программирования. Объектно-ориентированное программирование – одна из трех популярных парадигм программирования. Другой – функциональное и процедурное программирование.
Процедурное программирование основано на выполнении вызовов процедур. Процедура содержит ряд инструкций, которые необходимо выполнить. Процедуры также обычно называют функциями или подпрограммами. В процедурном программировании мы пишем список инструкций, чтобы указать компьютеру, что делать, строка за строкой.
Функциональное программирование рассматривает вычисления как ряд математических функций. Каждая функция принимает данные, выполняет некоторые вычисления и возвращает некоторые данные. Ключевая идея в этой парадигме заключается в том, что состояние и данные должны быть неизменяемыми. Думать о компьютерных программах как о математических функциях – довольно захватывающая идея; мы прибережем ее для другого поста!
Наконец, объектно-ориентированное программирование пытается отобразить объекты реального мира в программное обеспечение. Используя объектно-ориентированное программирование, мы можем моделировать свойства и функции вещей, которые появляются в нашем естественном мире, и моделировать их в наших компьютерных программах.
Класс против объекта
ООП сводится к эмуляции реальных вещей в нашем коде. Каждый предмет реального мира обладает некоторыми свойствами и несколькими функциями, которые он может выполнять. Допустим, мы хотим смоделировать автомобиль в нашем коде. Давайте рассмотрим несколько свойств автомобиля:
- Как его зовут?
Строка
- Каков его цвет?
Строка
- Сколько человек он может вместить?
Целое число
- Сколько топлива в машине в настоящее время?
Целое число
- Какое расстояние он преодолел до сих пор?
Целое число
Давайте также предположим, что автомобиль может выполнять некоторые важные функции, такие как:
- Завести двигатель
- Заправьте бак
- Проехать определенное расстояние и т.д.
Теперь мы смоделируем нашу машину в коде. Нам нужно определить класс, подобный чертежу, описывающему все эти характеристики автомобиля для языка программирования.
Определение класса
package com.godcrampy.oop_deep_dive; public class Car { String name; String color; Integer peopleCapacity; Integer fuelLeft; Integer distanceTravelled; public Car(String name, String color, Integer peopleCapacity) { this.name = name; this.color = color; this.peopleCapacity = peopleCapacity; this.fuelLeft = 100; this.distanceTravelled = 0; } void startEngine() { System.out.println("Starting Engine!"); } void refuelTank(int fuel) { fuelLeft += fuel; } void drive(int distance) { System.out.println("Driving..."); distanceTravelled += distance; } }
Давайте разберем код по частям:
Члены
String name; String color; Integer peopleCapacity; Integer fuelLeft; Integer distanceTravelled;
Они известны как члены класса. Представьте, что они являются переменными класса. Когда мы создадим новый автомобиль, каждый объект car получит свою собственную копию этих переменных. Я определил их как либо Строка
или Целое число
в соответствии со свойством автомобиля, который они представляют.
Методы
void startEngine() { System.out.println("Starting Engine!"); } void refuelTank(int fuel) { fuelLeft += fuel; } void drive(int distance) { System.out.println("Driving..."); distanceTravelled += distance; }
Это методы, которые мы определили для имитации различных функций реального автомобиля. StartEngine
имитирует запуск двигателя путем вывода на консоль. re топливный бак
принимает целое число и увеличивает оставшееся топливо/| члена класса на эту величину. То же самое относится и к методу
drive , который увеличивает
пройденное расстояние участника и выводит сообщение на консоль.
Конструктор
public Car(String name, String color, Integer peopleCapacity) { this.name = name; this.color = color; this.peopleCapacity = peopleCapacity; this.fuelLeft = 100; this.distanceTravelled = 0; }
Это уникальный метод класса, называемого конструктором. Игнорируйте ключевое слово public
; мы вернемся к нему позже. Обратите внимание, что у него то же имя, что и у класса. Также обратите внимание, что мы не указываем никакого возвращаемого типа (например, void
или int
). Класс blueprint сообщает Java о чем-то, известном как Car
, но он не создает для нас автомобиль. Когда мы создаем автомобиль, нам нужно вызвать метод конструктора. Таким образом, по сути, конструктор – это первый метод, который вызывается, когда мы создаем автомобиль из класса.
Взгляните на связку ключевых слов this
здесь. Конструктор имеет три параметра имя
, цвет
и людской потенциал/| . Мы используем их для установки начальных значений наших собственных членов в классе. Чтобы отличить
name нашего класса от
name конструктора, мы используем ключевое слово
is . Параметр
name принадлежит области действия функции, и просто написание
name указывает на параметр. Чтобы получить доступ к члену
имя , мы используем
this.name как это происходит во внешней области класса. Теперь давайте на самом деле создадим объект car из класса, который мы определили здесь.
Создание объекта
package com.godcrampy.oop_deep_dive; public class Main { public static void main(String[] args) { Car honda = new Car("Honda", "Red", 4); honda.startEngine(); System.out.println(honda.fuelLeft); honda.refuelTank(100); System.out.println(honda.fuelLeft); } }
Выход:
Starting Engine! 100 200
Давайте пройдемся по коду построчно и посмотрим, что происходит:
Car honda = new Car("Honda", "Red", 4);
Мы используем ключевое слово new
для создания экземпляра объекта из класса. Car
в Car honda =
относится к типу переменной honda
. Car
в new Car(...)
– это вызов конструктора. Обратите внимание, что параметры, которые мы передаем, точно такие же, как ожидает приведенный выше конструктор. Это запускает код в конструкторе и соответствующим образом устанавливает элементы.
honda.startEngine();
Здесь мы вызываем StartEngine
метод Car
. Мы используем .
оператор для доступа к членам и методам объекта. Это, в свою очередь, запускает воображаемый код для запуска двигателя вашего автомобиля и выводит “Запуск двигателя!” на нашей консоли.
System.out.println(honda.fuelLeft);
Здесь мы получаем доступ к значению переменной fuel Left
автомобиля и распечатываем его.
honda.refuelTank(100); System.out.println(honda.fuelLeft);
Функция топливный бак
увеличивает запас топлива
автомобиля honda
, и в следующей строке, когда мы напечатаем ее снова, мы увидим, что конечное значение будет 200
.
Что мы обнаружили?
Теперь мы изучили основы объектно-ориентированного программирования. Давайте сделаем шаг назад и проанализируем последствия того, что мы обнаружили до сих пор. В процедурном программировании мы привыкли передавать данные в процедуры для выполнения вычислений. В этой парадигме данные сами по себе могут выполнять операции над собой. Класс Car имеет все свои встроенные свойства и знает все задачи, которые он должен выполнять. Этот новый способ мышления о программах имеет свои преимущества и недостатки:
Преимущества:
- Классы логически представляют собой уровень абстракции над написанием простых процедур. Это облегчает написание сложного программного обеспечения.
- Проще писать и поддерживать код (открыт для обсуждения: P)
- Объектно-ориентированный код обладает разумной степенью возможности повторного использования. Стандартная библиотека Java является прекрасным примером этого.
Недостатки:
- Посмотрите на строки кода, которые мы написали, и на то, что мы распечатали. Для настройки и начальной загрузки даже самых простых программ требуется большое количество строк кода.
- Компьютерное оборудование по-прежнему выполняет код в значительной степени процедурным способом, строка за строкой. Объектно-ориентированный код выполняется немного медленнее, поскольку для его выполнения требуются дополнительные уровни обработки, прежде чем он достигнет уровня silicon.
На этом все для “пост” заканчивается. Мы заложили основу для развития еще большего количества концепций объектно-ориентированного программирования в предстоящем потоке сообщений. Вы можете найти код, упомянутый в сообщении, здесь: Вы можете найти код, упомянутый в сообщении, здесь:
Надеюсь, вам понравился этот пост. Если это было полезно, пожалуйста, проявите немного любви, нажав ♥ , 🦄 и сохранив пост на потом. О, кстати, ты хочешь выучить баш? Вот мой пост с ускоренным курсом по написанию сценариев оболочки:
🚀 Ускоренный курс по отсутствующему сценарию оболочки
Сахил Бондре ・ 21 апреля 20 ・ 6 минут чтения
🌟 Я сделал несколько Шпаргалок 🚀 Найди меня на Github | Твиттер | Веб-сайт 😄 Хорошего вам дня!
Оригинал: “https://dev.to/godcrampy/deep-dive-into-object-oriented-programming-part-1-1lbi”