Программы для объектно-ориентированного программирования
Обновлено: 20.11.2024
Языки объектно-ориентированного программирования (ООП) повсюду, куда бы мы ни посмотрели. Многие из наиболее широко используемых языков программирования, составляющих сегодня компьютерный мир, являются объектно-ориентированными. На самом деле, многие компьютерные программы и большая часть контента в сети построены на объектно-ориентированных языках высокого уровня. Понимание того, как работают объектно-ориентированные языки и почему они полезны, важно почти для каждой карьеры в области вычислительной техники.
В этой статье мы рассмотрим, что такое объектно-ориентированные языки, и рассмотрим их плюсы и минусы. Мы также рассмотрим краткий список некоторых из самых популярных языков ООП, используемых сегодня.
Что такое язык программирования?
Язык программирования — это набор правил и процедур, которые позволяют программистам давать компьютерам набор инструкций для выполнения. У каждого языка программирования есть свой синтаксис, который после изучения позволяет указать компьютеру, какие задачи он должен выполнять.
Подумайте об этом так. Английский — это язык, который позволяет вам общаться с носителями английского языка. Когда вы знаете основные правила английского языка, вы можете говорить с кем угодно, кто понимает те же самые правила. Но компьютеры не могут понять английский или любой другой «традиционный» язык в этом отношении.
Что такое объектно-ориентированные языки программирования?
Компьютеры — мощные машины. С помощью компьютера мы можем очень быстро вычислять числа и создавать удивительные программы для многих приложений. Однако, чтобы воспользоваться этой силой, нам нужно общаться с компьютером менее болезненно, чем вручную набирать единицы и нули.
Поэтому у нас есть языки программирования, которые поддерживаются уже написанным машинным кодом. Однако чем дальше мы удаляемся от машинного кода, тем более абстрактными и специализированными становятся языки для обработки данных. Вот почему у нас так много языков; ни один язык не идеален, и все они имеют разные и частично совпадающие области применения.
Парадигмы программирования
К сведению, языки программирования часто разделяются по парадигме программирования. Парадигма программирования — это один из способов просмотра данных и доступа к ним. Двумя основными парадигмами являются объектно-ориентированная и функциональная, хотя их гораздо больше (в том числе некоторые принципы, лежащие в основе вышеизложенного).
81 % участников заявили, что стали более уверенными в своих перспективах работы в сфере технологий после посещения учебного курса. Примите участие в тренировочном лагере сегодня.
Найдите подходящий вариант для буткемпа
В среднем выпускник буткемпа тратит менее шести месяцев на смену карьеры, начиная с буткемпа и заканчивая поиском своей первой работы.
Начните сменить профессию сегодня
Объектно-ориентированное программирование основано на объектах, которые представляют собой структуры данных, содержащие как данные (свойства или атрибуты), так и код (процедуры или методы). Объекты могут изменять себя с помощью «this» или «self». В большинстве языков ООП почти все является объектом, который может иметь как значения, так и исполняемый код. Каждый объект уникален, и хотя он может быть копией другого объекта, его переменные могут отличаться от переменных любого другого объекта.
Об объектах в объектно-ориентированном программном обеспечении можно думать как о реальных объектах. Подумайте об объекте, например о часах. У этих часов есть свойства. Он сделан из металла, он черный, имеет определенный вес. Но этот объект тоже что-то делает. Он отображает время, а также может воздействовать на себя, вращая шестеренки, чтобы изменить положение стрелок.
Еще одна особенность объектов заключается в том, что нам не всегда нужно знать, как работают часы, чтобы заставить их работать. Предполагая, что часы хорошо собраны, они будут надежно показывать время, и нам не придется вмешиваться в их внутреннюю работу.
В объектно-ориентированных языках есть объекты, похожие на объекты реального мира. Они могут иметь свойства и функции. Они также склонны следовать определенному набору принципов.
Принципы объектно-ориентированного программирования
В объектно-ориентированных языках используются четыре принципа. Эти четыре принципа являются общими свойствами, которые определяют их и делают значительно более эффективными. Некоторые люди называют их четырьмя столпами объектно-ориентированного программирования.
В этом руководстве вы узнаете об объектно-ориентированном программировании (ООП) в Python и его фундаментальной концепции с помощью примеров.
Видео: объектно-ориентированное программирование на Python
Объектно-ориентированное программирование
Python – это мультипарадигменный язык программирования. Он поддерживает различные подходы к программированию.
Один из популярных подходов к решению задачи программирования — создание объектов. Это известно как объектно-ориентированное программирование (ООП).
У объекта есть две характеристики:
Давайте рассмотрим пример:
Попугай — это объект, так как он обладает следующими свойствами:
- имя, возраст, цвет как атрибуты
- пение, танец как поведение
Концепция ООП в Python направлена на создание повторно используемого кода. Эта концепция также известна как DRY (не повторяйтесь).
В Python концепция ООП следует некоторым основным принципам:
Класс
Класс — это план объекта.
Мы можем думать о классе как о наброске попугая с ярлыками. Он содержит все подробности об имени, цветах, размерах и т. д. На основе этих описаний мы можем узнать о попугае. Здесь попугай — это объект.
Пример для класса попугаев может быть:
Здесь мы используем ключевое слово class для определения пустого класса Parrot. Из класса мы создаем экземпляры. Экземпляр — это конкретный объект, созданный из определенного класса.
Объект
Объект (экземпляр) — это экземпляр класса. Когда класс определен, определяется только описание объекта. Таким образом, память или хранилище не выделяются.
Пример для объекта класса попугай может быть:
Здесь obj — это объект класса Parrot .
Предположим, у нас есть данные о попугаях. Теперь мы собираемся показать, как построить класс и объекты попугаев.
Пример 1. Создание класса и объекта в Python
Вывод
В приведенной выше программе мы создали класс с именем Parrot. Затем мы определяем атрибуты. Атрибуты являются характеристикой объекта.
Эти атрибуты определяются внутри метода __init__ класса. Это метод инициализации, который запускается сразу после создания объекта.
Затем мы создаем экземпляры класса Parrot. Здесь blu и woo — это ссылки (значение) на наши новые объекты.
Мы можем получить доступ к атрибуту класса, используя __class__.species . Атрибуты класса одинаковы для всех экземпляров класса. Точно так же мы получаем доступ к атрибутам экземпляра, используя blu.name и blu.age. Однако атрибуты экземпляра различны для каждого экземпляра класса.
Чтобы узнать больше о классах и объектах, перейдите в раздел Классы и объекты Python
Методы
Методы — это функции, определенные внутри тела класса. Они используются для определения поведения объекта.
Пример 2. Создание методов в Python
Вывод
В приведенной выше программе мы определяем два метода: sing() и dance(). Они называются методами экземпляра, потому что они вызываются для объекта экземпляра, т.е. blu .
Наследование
Наследование — это способ создания нового класса для использования деталей существующего класса без его изменения. Вновь сформированный класс является производным классом (или дочерним классом). Точно так же существующий класс является базовым классом (или родительским классом).
Пример 3. Использование наследования в Python
Вывод
В приведенной выше программе мы создали два класса: Bird (родительский класс) и Penguin (дочерний класс). Дочерний класс наследует функции родительского класса. Мы можем видеть это в методе swim().
И снова дочерний класс изменил поведение родительского класса. Это видно из метода whoisThis(). Кроме того, мы расширяем функции родительского класса, создавая новый метод run().
Кроме того, мы используем функцию super() внутри метода __init__(). Это позволяет нам запускать метод __init__() родительского класса внутри дочернего класса.
Инкапсуляция
Используя ООП в Python, мы можем ограничить доступ к методам и переменным. Это предотвращает прямую модификацию данных, которая называется инкапсуляцией. В Python мы обозначаем частные атрибуты, используя подчеркивание в качестве префикса, то есть одинарное _ или двойное __ .
Пример 4. Инкапсуляция данных в Python
Вывод
В приведенной выше программе мы определили класс Computer.
Мы использовали метод __init__() для сохранения максимальной цены продажи компьютера. Здесь обратите внимание на код
Здесь мы попытались изменить значение __maxprice вне класса. Однако, поскольку __maxprice является закрытой переменной, эта модификация не отображается в выходных данных.
Как показано, чтобы изменить значение, мы должны использовать функцию установки, то есть setMaxPrice(), которая принимает цену в качестве параметра.
Полиморфизм
Полиморфизм — это возможность (в ООП) использовать общий интерфейс для нескольких форм (типов данных).
Предположим, нам нужно раскрасить фигуру, есть несколько вариантов формы (прямоугольник, квадрат, круг). Однако мы могли бы использовать тот же метод, чтобы раскрасить любую фигуру. Эта концепция называется полиморфизмом.
Пример 5. Использование полиморфизма в Python
Вывод
В приведенной выше программе мы определили два класса Parrot и Penguin . У каждого из них есть общий метод fly(). Однако их функции различны.
Для использования полиморфизма мы создали общий интерфейс, то есть функцию fly_test(), которая берет любой объект и вызывает метод объекта fly(). Таким образом, когда мы передавали объекты blu и peggy в функцию fly_test(), она работала эффективно.
Как следует из названия, объектно-ориентированное программирование или ООП относится к языкам, использующим объекты в программировании. Объектно-ориентированное программирование направлено на реализацию в программировании реальных объектов, таких как наследование, скрытие, полиморфизм и т. д. Основная цель ООП — связать воедино данные и функции, которые с ними работают, чтобы никакая другая часть кода не могла получить доступ к этим данным, кроме этой функции.
-
: определяет тип доступа к методу, т. е. откуда к нему можно получить доступ в вашем приложении. В Java существует 4 типа спецификаторов доступа.
- public: доступен во всех классах вашего приложения.
- защищено: доступно в пакете, в котором оно определено, и в его подклассах (включая подклассы, объявленные вне пакета)
- private: доступен только внутри класса, в котором он определен.
- по умолчанию (объявлено/определено без использования какого-либо модификатора): доступно в пределах того же класса и пакета, в котором определен его класс.
- Столпы OOPS
- Полиморфизм времени компиляции
- Полиморфизм во время выполнения
Передача сообщений. Объекты взаимодействуют друг с другом, отправляя и получая информацию друг другу. Сообщение для объекта представляет собой запрос на выполнение процедуры и, следовательно, будет вызывать функцию в принимающем объекте, которая генерирует желаемые результаты. Передача сообщений включает в себя указание имени объекта, имени функции и информации для отправки.
Теперь с базовыми предпосылками для пошагового обучения 4 столпа OOPS выглядит следующим образом. Давайте начнем с изучения различных характеристик объектно-ориентированного языка программирования
Концепции ООП следующие:
-
и передача метода
- Модификаторы: класс может быть общедоступным или иметь доступ по умолчанию (подробности см. здесь).
- Имя класса. Имя должно начинаться с начальной буквы (по соглашению с заглавной).
- Суперкласс (если есть): имя родительского класса (суперкласса), если есть, которому предшествует ключевое слово extends. Класс может расширять (подкласс) только одного родителя.
- Интерфейсы (если есть): список интерфейсов, разделенных запятыми, реализованных классом, если таковые имеются, перед которыми ставится ключевое слово "реализует". Класс может реализовывать более одного интерфейса.
- Body: тело класса, заключенное в фигурные скобки, < >.
- Состояние: оно представлено атрибутами объекта. Он также отражает свойства объекта.
- Поведение: представлено методами объекта. Он также отражает реакцию объекта на другие объекты.
- Идентификация: присваивает объекту уникальное имя и позволяет одному объекту взаимодействовать с другими объектами. Метод представляет собой набор операторов, которые выполняют определенную задачу и возвращают результат вызывающей стороне. Метод может выполнять определенную задачу, ничего не возвращая. Методы позволяют нам повторно использовать код без повторного ввода кода. В Java каждый метод должен быть частью некоторого класса, отличного от таких языков, как C, C++ и Python.
Методы экономят время и помогают нам повторно использовать код без повторного ввода кода.
Давайте теперь обсудим 4 столпа ООП:
Столп 1: Абстракция
Абстракция данных — это свойство, благодаря которому для пользователя отображаются только важные детали. Тривиальные или второстепенные единицы не отображаются для пользователя. Пример. Автомобиль рассматривается как автомобиль, а не как его отдельные компоненты.
Абстракция данных также может быть определена как процесс определения только требуемых характеристик объекта без учета несущественных деталей. Свойства и поведение объекта отличают его от других объектов подобного типа, а также помогают классифицировать/группировать объекты.
Рассмотрите пример из реальной жизни человека за рулем автомобиля. Человек знает только, что нажатие на акселератор увеличит скорость автомобиля или нажмет на тормоз остановит автомобиль, но он не знает, как на самом деле увеличивается скорость при нажатии на акселератор, он не знает о внутреннем механизме автомобиля или реализация акселератора, тормозов и т. д. в автомобиле. Вот что такое абстракция.
В Java абстракция достигается интерфейсами и абстрактными классами. Мы можем достичь 100% абстракции с помощью интерфейсов.
- Технически при инкапсуляции переменные или данные класса скрыты от любого другого класса, и доступ к ним возможен только через любую функцию-член собственного класса, в котором они объявлены.
- Как и при инкапсуляции, данные в классе скрыты от других классов, поэтому это также называется сокрытием данных.
- Инкапсуляция может быть достигнута путем объявления всех переменных в классе как закрытых и написания общедоступных методов в классе для установки и получения значений переменных.
Столп 3: Наследование
Наследование – важный элемент ООП (объектно-ориентированного программирования). Это механизм в Java, с помощью которого один класс может наследовать функции (поля и методы) другого класса.
- Суперкласс. Класс, функции которого наследуются, называется суперклассом (или базовым классом, или родительским классом).
- Подкласс: класс, наследующий другой класс, называется подклассом (или производным классом, расширенным классом или дочерним классом). Подкласс может добавлять свои собственные поля и методы в дополнение к полям и методам суперкласса.
- Повторное использование: Наследование поддерживает концепцию «повторного использования», т. е. когда мы хотим создать новый класс, а уже есть класс, который включает часть кода, который нам нужен, мы можем создать новый класс из существующего класса. Делая это, мы повторно используем поля и методы существующего класса.
Это относится к способности языков программирования ООП эффективно различать сущности с одинаковыми именами. Java делает это с помощью подписи и объявления этих сущностей.
Примечание. Полиморфизм в Java в основном бывает двух типов:
Кайл Херрити — опытный инженер-программист с более чем 15-летним опытом работы в отрасли, начиная от разработки высокоуровневых приложений и заканчивая низкоуровневыми проектами встраиваемых систем.
Знания в области компьютерного программирования очень востребованы в современном технологическом обществе. Знание объектно-ориентированного программирования (ООП) может оказаться полезным при разработке и сопровождении программного обеспечения. В этой статье мы обсудим основные принципы ООП и объясним их на простых для понимания примерах.
Что такое объектно-ориентированное программирование?
В объектно-ориентированном программировании группа атрибутов данных с функциями или методами объединяется в единицу, называемую "объектом". Как правило, языки ООП основаны на классах, что означает, что класс определяет атрибуты данных и функции в качестве плана для создания объектов, которые являются экземплярами класса. Популярные языки ООП на основе классов включают Java, Python и C++. Несколько независимых объектов могут быть созданы или представлены одним и тем же классом и взаимодействовать друг с другом сложным образом.
Простым примером может быть класс, представляющий человека. Класс person должен содержать атрибуты для представления такой информации, как возраст, имя, рост и т. д. Определение класса также может содержать такие функции, как "sayMyName", которые просто выводят имя этого человека на экран.
Семейство может быть создано путем создания экземпляров объектов person из класса для каждого члена семейства. Каждый объект человека будет содержать разные атрибуты данных, поскольку каждый человек уникален.
Четыре основы объектно-ориентированного программирования
В объектно-ориентированном программировании используются четыре основные концепции: инкапсуляция, абстракция, наследование и полиморфизм. Даже если эти концепции кажутся невероятно сложными, понимание общей схемы их работы поможет вам понять основы компьютерной программы ООП. Ниже мы обрисовываем эти четыре основных принципа и то, что они влекут за собой:
1. Инкапсуляция
Слово "инкапсулировать" означает заключать что-либо. Точно так же, как таблетка «инкапсулирует» или содержит лекарство внутри своей оболочки, принцип инкапсуляции работает аналогичным образом в ООП: путем создания защитного барьера вокруг информации, содержащейся в классе, от остального кода.
В ООП мы инкапсулируем, связывая данные и функции, которые работают с этими данными, в единое целое — класс. Поступая таким образом, мы можем скрыть частную информацию о классе от внешнего мира и предоставить доступ только к той функциональности, которая важна для взаимодействия с ним. Когда класс не позволяет вызывающему коду напрямую обращаться к своим личным данным, мы говорим, что он хорошо инкапсулирован.
Пример. Разрабатывая пример с классом person из предыдущего примера, у нас могут быть личные данные в классе, такие как «socialSecurityNumber», которые не должны предоставляться другим объектам в программе. Инкапсулируя этот член данных как закрытую переменную в классе, внешний код не будет иметь прямого доступа к нему, и он останется в безопасности внутри объекта этого человека.
Если в классе person написан метод для выполнения, скажем, банковской транзакции с именем "bankTransaction()", эта функция может при необходимости получить доступ к переменной "socialSecurityNumber". Личные данные человека будут хорошо инкапсулированы в такой класс.
2. Абстракция
Часто легче рассуждать и разрабатывать программу, когда вы можете отделить интерфейс класса от его реализации и сосредоточиться на интерфейсе.Это похоже на обращение с системой как с «черным ящиком», где не так важно понимать кровавую внутреннюю работу, чтобы пожинать плоды ее использования.
Этот процесс называется "абстракцией" в ООП, потому что мы абстрагируемся от кровавых деталей реализации класса и представляем только чистый и простой в использовании интерфейс через функции-члены класса. При правильном использовании абстракция помогает изолировать влияние изменений, внесенных в код, так что, если что-то пойдет не так, изменение повлияет только на детали реализации класса, а не на внешний код.
Пример. Представьте себе стереосистему как объект со сложной логической платой внутри. У него есть кнопки снаружи, позволяющие взаимодействовать с объектом. Когда вы нажимаете любую из кнопок, вы не думаете о том, что происходит внутри, потому что вы этого не видите. Несмотря на то, что вы не видите, как логическая плата выполняет эти функции в результате нажатия кнопки, она все равно их выполняет. , хотя и скрыто от вас.
Это концепция абстракции, которая невероятно полезна во всех областях техники, а также очень эффективно применяется в объектно-ориентированном программировании.
Пример: в ООП у нас может быть класс, определенный для представления человеческого тела. Можно определить некоторые функции как часть общедоступного интерфейса, например «walk()» или «eatFood()». Вызывающий код может вызывать эти функции и совершенно не обращать внимания на сложную внутреннюю работу человеческого тела и его необходимые функции для выполнения акта ходьбы или еды. Эти детали полностью скрыты в реализации функций тела walk() и eatFood() и, следовательно, абстрагируются от конечного пользователя. В этих случаях для вызова кода важно не понять, как мозг координирует ходьбу или как желудок справляется с перевариванием пищи, а просто то, что человек ходил или ел.
3. Наследование
Объектно-ориентированные языки, поддерживающие классы, почти всегда поддерживают понятие "наследования". Классы могут быть организованы в иерархии, где класс может иметь один или несколько родительских или дочерних классов. Если у класса есть родительский класс, мы говорим, что он является производным или унаследованным от родительского класса и представляет отношение типа «IS-A». Другими словами, дочерний класс «IS-A» родительского класса.
Поэтому, если класс наследуется от другого класса, он автоматически получает многие функции и свойства этого класса и может быть расширен для включения отдельного кода и данных. Хорошая особенность наследования заключается в том, что оно часто приводит к повторному использованию кода, поскольку функции родительского класса не нужно переопределять ни в одном из его дочерних классов.
Рассмотрите два класса: один является суперклассом, или родителем, а другой — подклассом, или дочерним. Дочерний класс наследует свойства родительского класса, возможно изменяя или расширяя его поведение. Программисты, применяющие технику наследования, упорядочивают эти классы в так называемые отношения типа "IS-A".
Пример. Например, в мире животных насекомое может быть представлено надклассом Insect. Все насекомые имеют схожие свойства, например, шесть ног и экзоскелет. Подклассы могут быть определены для кузнечиков и муравьев. Поскольку они наследуют или являются производными от класса Insect, они автоматически разделяют все свойства насекомых.
4. Полиморфизм
В ООП полиморфизм обеспечивает единообразную обработку классов в иерархии. Следовательно, код вызова должен быть написан только для обработки объектов из корня иерархии, и любой объект, созданный любым дочерним классом в иерархии, будет обрабатываться таким же образом.
Поскольку производные объекты используют тот же интерфейс, что и их родители, вызывающий код может вызывать любую функцию в интерфейсе этого класса. Во время выполнения будет вызвана соответствующая функция в зависимости от типа переданного объекта, что может привести к различному поведению.
Пример. Предположим, у нас есть класс под названием «Животное» и два дочерних класса «Кошка» и «Собака». Если в классе Animal есть метод для создания шума, который называется makeNoise, то мы можем переопределить функцию makeNoise, унаследованную подклассами Cat и Dog, на «мяу». и «лаять» соответственно. Затем можно написать другую функцию, которая принимает любой объект Animal в качестве параметра и вызывает его функцию-член makeNoise. Шум будет разным: либо «мяу», либо «лай» в зависимости от типа объекта-животного, который фактически был передан в функцию.
Откройте для себя лучшие ресурсы Indeed для технических специалистов, включая советы по карьере, образцы резюме, быстрые ссылки для поиска работы и многое другое.
Читайте также: