Я спросил ChatGPT, зачем мне писать статью об объектно-ориентированном программировании, когда ресурсов достаточно. Из списка причин одна совпадала с моим мотивом: изложить свою точку зрения.
Мне потребовалось некоторое время, чтобы полностью понять объектно-ориентированное программирование, так как поначалу технический жаргон казался подавляющим. Однако разбиение сложных терминов на более мелкие компоненты помогло мне лучше понять предмет.
Прежде чем мы углубимся в мир объектно-ориентированного программирования, давайте уделим немного времени изучению происхождения этого интригующего термина.
Парадигмы программирования
В программировании большинство языков имеют свой собственный уникальный набор функций и способов решения технических проблем. Поскольку каждый язык программирования предлагает уникальные функции, возникла необходимость в создании системы, позволяющей различать их. Это привело к созданию термина«парадигма программирования». Цель парадигм программирования — различать и классифицировать уникальные атрибуты каждого языка, облегчая понимание их возможностей и выбор правильного для конкретной задачи.
парадигма (сущ.) — типичный пример или образец чего-либо; шаблон или модель.
Другими словами, парадигма программирования – это стиль или подход к написанию программного обеспечения. Он определяет, как программное обеспечение организовано и построено. Некоторые из парадигм программирования включают в себя:
Imperative programming Procedural programming Functional programming Declarative programming Object-oriented Programming
Каждая парадигма имеет свой собственный набор правил, концепций и подходов к решению проблем, и программист может выбрать парадигму, которая лучше всего соответствует его потребностям для данного проекта. Например, объектно-ориентированное программирование (ООП) хорошо подходит для больших и сложных программных систем, а функциональное программирование (ФП) хорошо подходит для математических вычислений и обработки данных. Поскольку большинство современных языков предлагают более одной конкретной парадигмы, в которой мы можем программировать, выбор парадигмы программирования зависит от различных факторов, таких как предметная область, навыки команды и требования проекта.
Объекты
ориентированный (суффикс) — указывает направление, в котором что-то нацелено
Я понял, что термин объектно-ориентированный передает идею подхода к программированию. Что в данном контексте означает термин «объект»?
предмет (существительное) — материальная вещь, которую можно увидеть и потрогать.
Чтобы понять, что представляет собой объект в компьютерной программе, важно начать с понимания того, что представляет собой объект в реальном мире. Например, автомобиль можно рассматривать как объект, который имеет определенные характеристики, такие как модель, цвет и год выпуска, а также поведение или действия, которые он может выполнять, такие как запуск, остановка и вождение. В программировании эти функции обычно называются атрибутами или свойствами, а поведение называется методами.
Предположим, вы проектируете игрушечную машинку и хотите добавить некоторые функции и возможности одним нажатием кнопки. Как этого добиться с помощью программирования?
blueprint(n) — план проектирования или другой технический чертеж.
С помощью программирования вы можете создать столько различных вариантов автомобиля, сколько захотите. Это включает в себя создание чертежа того, как должен выглядеть объект «автомобиль», включая все его возможные атрибуты и методы. Затем вы можете использовать этот чертеж для создания нескольких автомобилей, каждый со своим уникальным набором функций и поведений.
Создание объектов в Python
Первый шаг — начать создавать свой класс в объектно-ориентированном программировании.
Для построения характеристик (атрибутов) объекта мы используем специальный метод Python __init__.
class Car: #defining features (attributes/properties) def __init__(self, model, year, min_speed, max_speed, odometer, engine_status='off'): self.model = model self.year = year self.min_speed = min_speed self.max_speed = max_speed self.odometer = odometer self.engine_status = engine_status
Затем мы добавляем поведение (методы) в соответствии с тем, чего мы хотим достичь.
#adding behaviors/functionality (method) def start_engine(self): if self.engine_status == 'off': self.engine_status = 'on' print('Engine started.') else: print('Engine is already running.') def get_status(self): if self.year <= 2017: return "Old" else: return "New" def get_price_range(self): status = self.get_status() if status == "Old": if self.odometer < 50000: return "$10,000 - $15,000" else: return "$5,000 - $10,000" else: return "$20,000 - $30,000" def __str__(self): return f'Car model: {self.model}\nYear: {self.year}\nMinimum speed: {self.min_speed}\nMaximum speed {self.max_speed}\nEngine status: {self.engine_status}'
Примечание. Метод __str__ — это специальный метод Python. Он используется для определения строкового представления объекта и может быть очень полезен в целях отладки, поскольку позволяет просматривать подробные сведения об атрибутах объекта в читаемом формате.
Примечание. Методы get_status() и get_price_range() могут не отражать прямое поведение автомобиля, исходя из приведенного выше объяснения. Однако в некоторых случаях эти методы могут иметь отношение к контексту, в котором используется автомобильный объект. Например, если автомобиль продается на онлайн-рынке, метод get_price_range() может использоваться для получения ценового диапазона аналогичных автомобилей, а метод get_status() может использоваться для проверки наличия или текущего состояния автомобиля. Таким образом, хотя эти методы не могут быть традиционным поведением автомобиля, они все же могут быть полезными методами для включения в класс объектов автомобиля. Скоро вы увидите примеры.
экземпляр (существительное) — пример или единичное появление чего-либо.
Как только наш класс определен, мы можем создавать объекты — экземпляры этого класса. Когда мы создаем объект, мы создаем уникальную копию класса и присваиваем ей имя. Мы можем создать столько объектов нашего класса, сколько нам нужно, каждый со своими уникальными данными и поведением.
car1 = Car('BMW', 2013, 30, 240, 250000 ) car2 = Car('BMW', 2015, 30, 230, 100000) car3 = Car('Toyota', 2020, 20, 180, 5000) car4 = Car('Honda', 2016, 25, 200, 150000)
Использование объектов в Python
Одной вещи не хватало, когда я пытался понять концепцию. Мы создали объект, и что? Я не совсем усвоил, что на самом деле цель создания объектов состоит в том, чтобы использовать их позже в нашей программе. Как в примере ниже:
cars = [car1, car2, car3, car4] # Get list of old and new cars old_cars = [] new_cars = [] for car in cars: if car.get_status() == "Old": old_cars.append(car) else: new_cars.append(car) answer = str(input("Get the list of cars according to their status: ")) if answer.upper() == 'OLD': print("Old cars:") for car in old_cars: print(f"{car.model}, {car.year}, {car.odometer} km/h - Price range: {car.get_price_range()}") elif answer.upper() == 'NEW': print("\nNew cars:") for car in new_cars: print(f"{car.model}, {car.year}, {car.odometer} km/h - Price range: {car.get_price_range()}") else: print('You have to type "old" or "new" ')
Представьте теперь, что вы хотите получить список старых и новых автомобилей и их возможный ценовой диапазон по вашему запросу. И теперь вы используете свои автомобильные объекты и методы, чтобы узнать, какие автомобили относятся к категории старых или новых.
Вывод (набрав «старый»):
Old cars: BMW, 2013, 250000 km/h - Price range: $5,000 - $10,000 BMW, 2015, 100000 km/h - Price range: $5,000 - $10,000 Honda, 2016, 150000 km/h - Price range: $5,000 - $10,000
Мы видим, что создание объектов — это только часть процесса. Истинная сила ООП заключается в возможности манипулировать этими объектами и использовать их различными способами в нашей программе.
Заключение
Объектно-ориентированное программирование (ООП) — одна из наиболее широко используемых парадигм программирования. Однако важно отметить, что ни одна парадигма не является «лучшей» или наиболее подходящей для всех проектов, и разные проекты могут требовать разных подходов или комбинаций парадигм.
Пожалуйста, поделитесь своими мыслями по этой теме или статье. И если вам понравилось читать статью, не забудьте нажать кнопку аплодировать и подписаться.