Ооп концепции: 7) Концепция ООП — CoderLessons.com

Содержание

7) Концепция ООП — CoderLessons.com

Что такое OOPS?

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) — это концепция программирования, которая работает на принципах абстракции, инкапсуляции, наследования и полиморфизма. Это позволяет пользователям создавать объекты, которые они хотят, а затем создавать методы для обработки этих объектов. Основная концепция ООП заключается в создании объектов, их повторном использовании в программе и манипулировании этими объектами для получения результатов.

Объектно-ориентированное программирование, широко известное как ООП, используется в современном языке программирования, таком как Java

Основные концепции OOPS

1) Класс

Класс представляет собой группу похожих объектов. Это только логический компонент, а не физический объект. Например, если у вас есть класс под названием «Дорогие автомобили», у него могут быть такие объекты, как Mercedes, BMW, Toyota и т. Д. Его свойства (данные) могут быть ценой или скоростью этих автомобилей. В то время как методы могут быть выполнены с этими автомобилями, вождение, задний ход, торможение и т. Д.

2) Объект

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

3) Наследование

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

4) Полиморфизм

Полиморфизм относится к способности переменной, объекта или функции принимать несколько форм. Например, в английском языке бег глагола имеет другое значение, если вы используете его с ноутбуком , пешеходом и бизнесом . Здесь мы понимаем значение бега, основываясь на других словах, используемых вместе с ним. То же самое относится и к полиморфизму.

5) Абстракция

Абстракция является актом представления основных функций без включения деталей фона. Это метод создания нового типа данных, который подходит для конкретного приложения. Например, во время вождения автомобиля вам не нужно беспокоиться о его внутренней работе. Здесь вам просто нужно заботиться о таких деталях, как руль, шестерни, акселератор и т. Д.

6) Инкапсуляция

Инкапсуляция — это ООП метод упаковки данных и кода. В этой концепции OOPS переменные класса всегда скрыты от других классов. Доступ к нему возможен только с использованием методов их текущего класса. Например — в школе ученик не может существовать без класса.

7) Ассоциация

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

8) Агрегация

В этой технике все объекты имеют отдельный жизненный цикл. Тем не менее, существует владение, так что дочерний объект не может принадлежать другому родительскому объекту. Например, рассмотрим класс / предметный отдел и преподавателя. Здесь, один учитель не может принадлежать нескольким отделам, но даже если мы удалим отдел, объект учителя никогда не будет уничтожен.

9) Композиция

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

Преимущества OOPS:

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

Сравнение OOPS с другими стилями программирования с помощью Примера

Давайте разберемся с примером, как ООП отличается от других подходов программирования.

Языки программирования можно разделить на 3 основных типа

  1. Неструктурированные языки программирования: самый примитивный из всех языков программирования с последовательным потоком управления. Код повторяется во всей программе
  2. Языки структурированного программирования: имеет последовательный поток управления. Использование функций позволяет повторно использовать код.
  3. Объектно-ориентированное программирование : объединяет данные и действия вместе.

Нажмите здесь, если видео не доступно

Давайте разберем эти 3 типа на примере.

Предположим, вы хотите создать банковское программное обеспечение с такими функциями, как

  1. депозит
  2. Изымать
  3. Показать баланс

Неструктурированные языки программирования

Самым ранним из всех языков программирования был неструктурированный язык программирования. Очень простой код банковского приложения на неструктурированном языке программирования будет иметь две переменные: один номер счета и другую для баланса счета.

int account_number=20;
int account_balance=100;

Предположим, внесен депозит в размере 100 долларов.

account_balance=account_balance+100

Далее вам нужно отобразить баланс аккаунта.

printf(“Account Number=%d,account_number)
printf(“Account Balance=%d,account_balance)

Сейчас сумма в 50 долларов снимается.

account_balance=account_balance-50

Опять же, вам нужно отобразить баланс счета.

printf(“Account Number=%d,account_number)
printf(“Account Balance=%d,account_balance)

Для любой последующей операции ввода или вывода — вы будете повторять код снова и снова.

Структурированное программирование

С появлением структурированного программирования повторяющиеся строки кода были помещены в структуры, такие как функции или методы. Когда это необходимо, выполняется простой вызов функции.

Объектно-ориентированного программирования

В нашей программе мы имеем дело с данными или выполняем определенные операции с данными.

На самом деле, наличие данных и выполнение определенной операции над этими данными является основной характеристикой любой программы.

Эксперты в области программирования программного обеспечения думали о сочетании данных и операций. Следовательно, рождение объектно-ориентированного программирования, которое обычно называют OOPS.

Один и тот же код в OOPS будет иметь те же данные и некоторые действия, выполняемые с этими данными.

Class Account{
    int account_number;
    int account_balance;
public void showdata(){
    system.out.println(“Account Number”+account_number)
    system.outprintln(“Account Balance”+ account_balance)
}
}

Объединяя данные и действия, мы получим много преимуществ по сравнению со структурным программированием, а именно:

  • абстракция
  • Инкапсуляция
  • наследование
  • Полиморфизм

Они обсуждаются более подробно в последующих уроках

 

Основы ООП (Основные концепции ООП)

За урок мы познакомимся с понятием ООП и узнаем про основные концепции данной технологии. Нами будут изучены базовые понятия ООП, а также мы разберем что такое классы и объекты.

На начальном этапе ООП – это тёмный лес, в котором многое непонятно и слишком усложнено. На самом деле всё вовсе не так. Предлагаем абстрагироваться от специфических (непонятных) определений и познакомиться с ООП простыми словами. 

Поскольку на примере все усвоить гораздо проще, то давайте за пример возьмем робота, которого постараемся описать за счёт классов в ООП.

Класс в случае с роботом – это его чертёж. Экземпляром класса (объектом) называет целый робот, который создан точно по чертежу.

Наследование – это добавление полезных опций к чертежу робота. К примеру, берем стандартный чертёж робота и дорисуем к нему лазеры, крылья и броню. Все эти дорисовки мы сделаем в классе наследнике, основной функционал которого взят из родительского класса.

Полиморфизм – это общий функционал для всех роботов и не важно что каждый робот может очень сильно отличаться друг от друга. К примеру, в главном классе мы указываем возможность передвижения для всех последующих роботов. Далее в классе наследнике мы можем дополнительно указать возможность левитации для робота, в другом же классе укажем возможность передвижения по воде и так далее. Получается, что есть общий функционал что записан в главном чертеже, но его можно переписать для каждого последующего робота (для каждого наследника).

А инкапсуляция является для нас бронёй, защищающей робота. Под пластырем брони находятся уязвимые элементы, вроде проводов и микросхем. После прикрытия брешей с помощью брони (protected или private), робот полностью защищён от внешних вмешательств. По сути, мы делаем доступ ко всем полям лишь за счёт методов, тем самым прямой доступ к полю будет закрыт.

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

Шпаргалка по принципам ООП

Чтобы стать программистом, нужно знать принципы ООП как Отче наш. Держите структурированную шпаргалку по объектно-ориентированному программированию.

Главное

  • Инкапсулируйте все, что может изменяться;
  • Уделяйте больше внимания интерфейсам, а не их реализациям;
  • Каждый класс в вашем приложении должен иметь только одно назначение;
  • Классы — это их поведение и функциональность.

Базовые принципы ООП

  • Абстракция — отделение концепции от ее экземпляра;
  • Полиморфизм — реализация задач одной и той же идеи разными способами;
  • Наследование — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию;
  • Инкапсуляция — размещение одного объекта или класса внутри другого для разграничения доступа к ним.

Используйте следующее вместе с наследованием

  • Делегация — перепоручение задачи от внешнего объекта внутреннему;
  • Композиция — включение объектом-контейнером объекта-содержимого и управление его поведением; последний не может существовать вне первого;
  • Агрегация — включение объектом-контейнером ссылки на объект-содержимое; при уничтожении первого последний продолжает существование.

Не повторяйся (Don’t repeat yourself — DRY)

Избегайте повторного написания кода, вынося в абстракции часто используемые задачи и данные. Каждая часть вашего кода или информации должна находиться в единственном числе в единственном доступном месте. Это один из принципов читаемого кода.

Принцип единственной обязанности

Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.

Принцип открытости/закрытости

Программные сущности должны быть открыты для расширения, но закрыты для изменений.

Принцип подстановки Барбары Лисков

Методы, использующие некий тип, должны иметь возможность использовать его подтипы, не зная об этом.

Принцип разделения интерфейсов

Предпочтительнее разделять интерфейсы на более мелкие тематические, чтобы реализующие их классы не были вынуждены определять методы, которые непосредственно в них не используются.

Принцип инверсии зависимостей

Система должна конструироваться на основе абстракций «сверху вниз»: не абстракции должны формироваться на основе деталей, а детали должны формироваться на основе абстракций.

Перевод статьи «Object-Orientated Design Principles»

 

Концепции объектно-ориентированного программирования. Основы AS/400

Читайте также








1.2. Методология объектно-ориентированного программирования



1.2. Методология объектно-ориентированного программирования
Со временем ситуация стала существенно изменяться. Оказалось, что трудоемкость разработки программных приложений на начальных этапах программирования оценивалась значительно ниже реально затрачиваемых






1.3. Методология объектно-ориентированного анализа и проектирования



1.3. Методология объектно-ориентированного анализа и проектирования
Необходимость анализа предметной области до начала написания программы была осознана давно при разработке масштабных проектов. Процесс разработки баз данных существенно отличается от написания






Приложение: Объектно-ориентированные языки программирования



Приложение: Объектно-ориентированные языки программирования
Использование объектно-ориентированной методологии не ограничено каким-либо одним языком программирования — она применима к широкому спектру объектных и объектно-ориентированных языков. Наряду с анализом и






А.1. Концепции



А.1. Концепции
В настоящее время насчитывается более двух тысяч языков программирования высокого уровня. Большинство этих языков возникло исходя из конкретных требований некоторой предметной области. Каждый новый язык позволял переходить ко все более и более сложным






А.8. Другие объектно-ориентированные языки программирования



А.8. Другие объектно-ориентированные языки программирования
На рис. А-2 вы найдете названия многих важных объектных и объектно-ориентированных языков, в библиографии есть ссылки на информацию о большинстве из них. <рисунок пропущен>  






Принципы объектно-ориентированного программирования



Принципы объектно-ориентированного программирования
Все объектно-ориентированные языки используют три базовых принципа объектно-ориентированного программирования.• Инкапсуляция. Как данный язык скрывает внутренние особенности реализации объекта?• Наследование.






2. Лекция: Основы объектно-ориентированного программирования



2. Лекция: Основы объектно-ориентированного программирования
В этой лекции излагается основная концепция объектно-ориентированного подхода (ООП) к проектированию программного обеспечения. Поскольку в Java почти все типы (за исключением восьми простейших) являются






15 цитат Алана Кея, создателя объектно-ориентированного программирования Андрей Письменный



15 цитат Алана Кея, создателя объектно-ориентированного программирования

Андрей Письменный

Опубликовано 13 мая 2013

1. «Будущее не стелется перед нами, как дорога. Это что-то, что мы выбираем сами, и до тех пор, пока мы не нарушаем какие-нибудь законы






Конструирование объектно-ориентированного ПО



Конструирование объектно-ориентированного ПО
Мы уже давали определение конструирования ОО-ПО: будучи весьма общим, оно представляет метод следующим образом: «основывать архитектуру всякой программной системы на модулях, полученных из типов объектов, с которыми






Глава 8 ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ



Глава 8
ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Практически сразу после появления языков третьего поколения (1967) ведущие специалисты в области программирования выдвинули идею






8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ



8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Практически сразу после появления языков третьего поколения (1967) ведущие специалисты в области программирования выдвинули идею преобразования постулата фон Неймана: «данные и программы неразличимы в






8.3. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ТЕХНОЛОГИЙ СТРУКТУРНОГО И ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ



8.3. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ТЕХНОЛОГИЙ СТРУКТУРНОГО И ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Для проведения сравнительного анализа технологий структурного и объектно-ориентированного программирования разработана специальная методика, основанная на таких






8.8. ПРОЕКТНАЯ ПРОЦЕДУРА ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ ПО Б. СТРАУСТРУПУ



8.8. ПРОЕКТНАЯ ПРОЦЕДУРА ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ ПО Б. СТРАУСТРУПУ
8.8.1. Укрупненное изложение проектной процедуры Б. СтрауструпаБ. Страуструп — автор объектно-ориентированного языка программирования C++ с множественным наследованием. У Б. Страуструпа














Концепции ООП — Java

Что такое объект?

Java — это так называемый объектно-ориентированный (ОО) язык, при помощи которого вы можете заниматься объектно-ориентированным программированием (ООП). Такой стиль программирования очень отличается от процедурного программирования и может показаться немного странным для большинства программистов, не сталкивавшихся с ООП. Прежде всего, надо понять, что такое объект; именно на этом понятии базируется ООП.

Объект — это самостоятельный фрагмент кода, который знает о себе и может рассказать об этом другим объектам, если они зададут вопрос, который он понимает. Объект имеет члены (переменные) и методы, являющиеся вопросами, на которые он может ответить (даже если они не выглядят вопросами). Набор методов, на которые объект знает как реагировать, является его интерфейсом. Некоторые методы являются общедоступными (public), это означает, что другой объект может вызвать (или активизировать) их. Этот набор методов известен под названием public-интерфейс .

Когда один объект вызывает метод другого объекта, это называется передачей сообщения. Эта фраза соответствует ОО-терминологии, но чаще всего в Java-мире люди говорят «Вызвать этот метод», а не «Передать это сообщение». В следующем разделе мы рассмотрим концептуальный пример, который должен прояснить все это.

Концептуальный пример объекта

Предположим, что мы имеем объект Человек. Каждый объект Человек имеет имя, возраст, национальность и пол. Каждый объект Человек знает, как говорить и ходить. Один объект может спросить у другого о его возрасте, или может cказать, чтобы другой объект начал (или закончил) перемещение. В терминах программирования вы можете создать объект Person и назначить ему некоторые переменные (например, имя и возраст). Если вы создали второй объект Person, он может спросить у первого его возраст или сказать ему начать перемещение. Он может сделать это путем вызова методов первого объекта Person. Когда мы начнем писать код на языке Java, вы увидите, как язык реализует концепцию объекта.

Обычно концепция объекта остается неизменной и в языке Java и в других объектно-ориентированных языках программирования, хотя реализуют они ее по-разному. Эта концепция универсальна. По этой причине объектно-ориентированные программисты, независимо от применяемого ими языка, общаются не так, как процедурные программисты. Процедурные программисты часто говорят о функциях и модулях. Объектно-ориентированные программисты говорят об объектах и часто говорят о них, используя личные местоимения. Вы часто можете услышать, как один ОО-программист говорит другому: «Этот объект Supervisor говорит здесь объекту Employee «Дай мне свой ID», поскольку он должен назначить задания для Employee».

Процедурные программисты могут считать такой способ мышления странным, но он является естественным для ОО-программистов. В их программном мире все является объектом (с некоторыми исключениями в языке Java), а программы представляют собой взаимодействие (или разговор) объектов между собой.

Фундаментальные принципы ООП

Естественно, концепция объекта является критичным понятием для ООП, как идея о том, что объекты общаются между собой при помощи сообщений. Но существуют также три других фундаментальных принципа, которые вы должны понимать.

Вы можете запомнить три фундаментальных принципа ООП при помощи акронима PIE (ПНИ):

  • Polymorphism (Полиморфизм)
  • Inheritance (Наследование)
  • Encapsulation (Инкапсуляция)

Это все необычные названия, но эти концепции не трудно понять. В следующих нескольких разделах мы подробно рассмотрим каждую из них в обратном порядке.

Инкапсуляция

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

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

Наследование

При вашем рождении, говоря с биологической точки зрения, вы являлись комбинацией ДНК ваших родителей. Вы не были точной копией ни одного из них, но были похожи на обоих. ОО использует для объектов этот же принцип. Представьте опять объект Человек. Вспомните, что каждый этот объект имеет национальность. Не все эти объекты имеют одинаковую национальность, но не являются ли они похожими? Конечно! Это не Лошади, или Шимпанзе, или Киты. Это объект Человек. Все объекты Человек имеют определенные общие признаки, отличающие их от животных других типов. Но они немного отличаются друг от друга. Похож ли Ребенок на Подростка? Нет. Они двигаются и говорят по-разному. Но Ребенок определенно является Человеком.

В терминах ООП Человек и Ребенок являются классами в одной иерархии и (вероятнее всего) Ребенок наследует характеристики и поведение от своего родителя. Мы говорим, что конкретный Ребенок имеет тип Человек, или что этот Ребенок наследуется из объекта Человек. Это не срабатывает в обратную сторону — Человек не обязательно Ребенок. Каждый объект Ребенок является экземпляром класса Ребенок, и когда мы создаем объект Ребенок, мы создаем его экземпляр. Представляйте класс как шаблон для экземпляров этого класса. Обычно то, что может делать объект, зависит от типа объекта или, другими словами, от того, экземпляром какого класса он является. И Ребенок, и Подросток имеют тип Человек, но один может работать, а другой нет.

В терминах Java Человек — это суперкласс классов Ребенок и Подросток, которые являются подклассами класса Человек. Еще одной концепцией, связанной с наследованием, является абстракция. Человек находится на более высоком уровне абстракции, чем Ребенок или Подросток. Оба они имеют тип Человек, но несколько отличаются. Все объекты Человек имеют некоторые общие свойства (например, имя и возраст). Вы можете создать экземпляр класса Человек? Нет. Вы имеете либо экземпляр класса Ребенок, либо класса Подросток. Человек, в терминах Java, является абстрактным классом. Вы не можете иметь прямой экземпляр класса Человек. Только Ребенок или Подросток, которые оба имеют тип Человек, являются реальными. Рассмотрение абстрактных классов выходит за рамки данного руководства, поэтому мы больше о них говорить не будем.

Теперь, подумайте, что значит для объекта Ребенок действие «говорить». Мы рассмотрим смысл этого в следующем разделе.

Полиморфизм

«Говорит» ли Ребенок также как Подросток? Конечно же, нет. Ребенок издает шум, который не всегда является распознаваемыми словами, которые используют объекты Подросток. Поэтому, когда я создаю экземпляр объекта Ребенок (высказывание «создать экземпляр Ребенка» означает то же самое — слово «объект» подразумевается) и указываю ему «говорить», он может ворковать или булькать. Ожидается, что Подросток будет более внятен.

В иерархии человечества мы имеем класс Человек на вершине иерархии и классы Ребенок и Подросток ниже, в качестве подклассов. Все объекты Человек могут говорить, поэтому объекты Ребенок и Подросток тоже могут, но делают это по-разному. Ребенок булькает и издает простейшие звуки. Подросток произносит слова. Вот что означает полиморфизм: объекты делают вещи по-разному.

В чем состоит (и в чем нет) объектно-ориентированность языка Java

Как мы увидим, язык Java позволяет создавать первоклассные объекты, но не все в языке является объектом. Это немного не так, как в некоторых других объектных языках, например Smalltalk. Smalltalk является чистым объектно-ориентированным языком, т.е. все в нем является объектом. Язык Java является смесью объектов и других сущностей, не являющихся объектами. Он также позволяет одному объекту знать внутренности другого, если вы, как программист, реализуете такую возможность. Это нарушает принцип инкапсуляции.

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

Хотя многие ярые сторонники объектно-ориентированного подхода справедливо спорят о том, является ли язык Java объектно-ориентированным или нет, это на самом деле не так уж и важно. Платформа Java появилась, чтобы остаться. Научитесь применять ООП с Java там, где это возможно, и оставьте аргументы о чистоте другим. Язык Java позволит вам писать понятные, относительно лаконичные и управляемые программы, которые достаточно хороши для большинства профессиональных ситуаций.


Похожие записи:

Основные концепции объектно-ориентированного программирования

Основные концепции объектно-ориентированного программирования

Объектно-ориентированное программирование (ООП) — это особый подход к написанию программ. Чтобы понять, что такое ООП и зачем оно нужно, будет полезно вспомнить некоторые факты из истории развития информационных технологий. Первые программы вносились в компьютер с помощью переключателей на передней панели компьютера — в то время компьютеры занимали целые комнаты.

Объектно-ориентированное программирование (ООП) — это особый подход к написанию программ. Чтобы понять, что такое ООП и зачем оно нужно, будет полезно вспомнить некоторые факты из истории развития информационных технологий. Первые программы вносились в компьютер с помощью переключателей на передней панели компьютера — в то время компьютеры занимали целые комнаты. Такой способ программирования был крайне неэффективным — на подключение кабелей и установку переключателей могло уйти несколько часов, а иногда и целый рабочий день. А сами расчёты занимали считаные минуты. А если один из программистов (над такими компьютерами работала группа сотрудников) неправильно подключил кабель или установил переключатель, то приходилось всё перепроверять. По сути, весь процесс начинался заново.

Позже появились перфокарты. Программа, т. е. последовательность действий, которые должен был выполнить компьютер, наносились на перфокарту. Пользователь вычислительной машины (именно так называли компьютеры в то время) писал программу, оператор «записывал» программу на перфокарту, которая передавалась оператору вычислительного отдела. Через некоторое время оператор возвращал пользователю результат работы программы — рулон бумаги с результатами вычислений. Мониторов тогда не было, а всё, что выводил компьютер, печаталось на бумаге. Понятно, если в расчётах была допущена ошибка (именно со стороны пользователя, так как компьютеры не ошибаются — они делают с точностью то, что заложено программой), то вся цепочка действий (программист, оператор перфокарты, оператор вычислительной машины, проверка результатов) повторялась заново.

Следующий этап в программировании — это появление языка Ассемблер. Этот язык программирования позволял писать довольно длинные для того времени программы. Но Ассемблер — это язык программирования низкого уровня, т. е. все операции проводятся на уровне «железа». Рассмотрим простейший пример. Сейчас, чтобы на PHP выполнить элементарное действие, например, сложение чисел, достаточно записать:

$result = 2*5;

На языке же Ассемблер для выполнения этой же операции нужно выполнить как минимум три действия — загрузить в один из регистров первое число (команда MOV), загрузить в другой регистр второе число (опять команда MOV), выполнить сложение регистров командой сложения ADD. Результат будет помещён в третий регистр. Названия регистров можно здесь не указывать, так как они зависят от архитектуры процессора, а это ещё один недостаток Ассемблера. Если вам нужно перенести программу на компьютер с другой архитектурой, то придётся переписывать всё с учётом особенностей целевой архитектуры.

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

$a = s + e;

и вам не нужно задумываться, где именно из регистров (или просто в ОЗУ) хранятся значения, присвоенные переменным s и e. Вы также не знаете, куда будет помещено значение переменной a. Вы просто знаете, что к нему можно обратиться по имени a.

Первый язык высокого уровня — FORTRAN (FORmula TRANslator).

Следующий этап — появление структурного программирования. Проблема в том, что программы на языке высокого уровня очень быстро росли в размерах, что сделало их фактически нечитаемыми из-за отсутствия какой-либо структуры самой программы. Структурное программирование подразумевает наличие структуры программы и программных блоков, а также отказ от инструкций безусловного перехода (GOTO, JMP).

После выделения структуры программы появилась необходимость в создании подпрограмм, которые существенно сокращали её код. Намного проще один раз написать код вычисления какой-то формулы и оформить его в виде функции. И затем для подсчёта 10 результатов по этой формуле вам понадобится 10 раз вызвать данную функцию, а не писать 10 раз один и тот же код. Этот новый класс в программировании назвали процедурным.

Со временем процедурное программирование постигла та же участь, что и структурное. Программы стали такими большими, что их было неудобно читать. Нужен был новый подход к программированию. Таким стало объектно-ориентированное программирование (ООП). ООП базируется на трёх принципах — инкапсуляция, полиморфизм, наследование. Разберёмся, что есть что.

С помощью инкапсуляции вы сможете объединить данные и обрабатывающий их код. Инкапсуляция защищает и код, и данные от вмешательства извне. Базовое понятие в ООП — это класс. Грубо говоря, класс — это своеобразный тип переменной. Экземпляр класса (переменная типа класс) называется объектом. В свою очередь, объект — это совокупность данных (свойств) и функций (методов) для их обработки. Данные и методы обработки называются членами класса.

Таким образом, объект — это результат инкапсуляции, поскольку он включает в себя и данные и код их обработки. Далее вы поймёте, как это работает. А пока представьте, что объект — это сумка, собранная по принципу «всё своё ношу с собой».

Члены класса бывают закрытыми и открытыми. Открытые члены класса доступны для других частей программы, которые не являются частью объекта. Закрытые члены доступны только методам самого объекта.

Теперь поговорим о полиморфизме. Если вы программировали на языке C (на обычном, а не на C++), то наверняка знакомы с функциями abs(), fabs(), labs(). Все они вычисляют абсолютное значение числа, но каждая из функций используется для своего типа данных. Если бы C поддерживал полиморфизм, то можно было бы создать одну функцию abs(), но объявить её трижды — для каждого типа данных, а компилятор уже сам выбрал нужный вариант для функции, в зависимости от переданного ей типа данных. Эта практика называется перезагрузкой функций. Перезагрузка функций существенно облегчает труд программиста. Вам нужно помнить в несколько раз меньше названий функций для написания программы.

Полиморфизм позволяет нам манипулировать с объектами путём создания стандартного интерфейса для схожих действий.

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

Всё вышесказанное было истинно для любого полноценного объектно-ориентированного языка программирования. Исключение здесь составляет JavaScript, где поддержка ООП довольно ограничена. Например, нет ни закрытых (приватных), ни открытых свойств и методов. Все свойства и методы являются открытыми. Создание класса сводится к созданию функции конструктора. Полноценной поддержки ООП в Javascript нет и не будет. Но не стоит забывать, что это не Java, а просто скриптовый язык для браузера.

Четыре концепции ООП. Классы и отношения между…

Привет, сегодня поговорим про четыре концепции ооп, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое
четыре концепции ооп,определение классы,отношения между классами , настоятельно рекомендую прочитать все из категории Объектно-ориентированное программирование ООП

В прошлой публикации были рассмотрено «понятие объекта в ООП ». В этой заметке будут описаны классы. Это довольно сложная тема, рассмотрение которой подразумевает что Вы знакомы с понятием объекта в объектно-ориентированном программировании.

Рисунок отличие класса и объекта

Понятие класса в ООП

В любой системе функционирует множество объектов. Некторые из них «похожи» и однотипны. Например, в банковской системе имеется множество объектов-счетов и объектов-клиентов. Однотипные объекты объединяются в классы.

Класс представляет собой шаблон, по которому определяется форма объекта.

В нем указываются данные + код, который будет оперировать этими данными

Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта. При этом очень важно подчеркнуть, что класс является логической абстракцией. Физическое представление класса появится в оперативной памяти лишь после того, как будет создан объект этого класса.

Классы и структуры — это, по сути, шаблоны, по которым можно создавать объекты. Каждый объект содержит данные и методы, манипулирующие этими данными.

Рисунок составляющие класса

Все объекты одного и того же класса обладают одинаковым интерфейсом и реализуют этот интерфейс одним и тем же способом. Два объекта одного класса в ООП могут отличаться только текущим состоянием, причем всегда теоретически возможно так изменить состояние одного объекта, чтобы он стал равным другому объекту.

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

Индивидуальные объекты называются экземплярами класса, а класс в ООП — это шаблон по которому строятся объекты.

Таким образом, наша банковская система состоит из экземпляров трех классов: класса счетов, класса банкоматов и класса клиентов. Названия классов в ООП пишутся с большой буквы, а названия объектов — с маленькой.

Данные-члены

Данные-члены — это те члены, которые содержат данные класса – поля, константы, события.

Поля (field)

Это любые переменные, ассоциированные с классом.

Константы

Константы могут быть ассоциированы с классом тем же способом, что и переменные. Константа объявляется с помощью ключевого слова const. Если она объявлена как public, то в этом случае становится доступной извне класса.

События

Это члены класса, позволяющие объекту уведомлять вызывающий код о том, что случилось нечто достойное упоминания, например, изменение свойства класса либо некоторое взаимодействие с пользователем. Клиент может иметь код, известный как обработчик событий, реагирующий на них.

Функции-члены

Функции-члены — это члены, которые обеспечивают функциональность для манипулирования данными класса.

Они включают методы, свойства, конструкторы, финализаторы, операции и индексаторы:

Методы (method)

Это функции, ассоциированные с определенным классом. Как и данные-члены, по умолчанию они являются членами экземпляра. Они могут быть объявлены статическими с помощью модификатора static.

Свойства (property)

Это наборы функций, которые могут быть доступны клиенту таким же способом, как общедоступные поля класса. В C# предусмотрен специальный синтаксис для реализации чтения и записи свойств для классов, поэтому писать собственные методы с именами, начинающимися на Set и Get, не понадобится. Поскольку не существует какого-то отдельного синтаксиса для свойств, который отличал бы их от нормальных функций, создается иллюзия объектов как реальных сущностей, предоставляемых клиентскому коду.

Конструкторы (constructor)

Это специальные функции, вызываемые автоматически при инициализации объекта. Их имена совпадают с именами классов, которым они принадлежат, и они не имеют типа возврата. Конструкторы полезны для инициализации полей класса.

Финализаторы (finalizer)

Вызываются, когда среда CLR определяет, что объект больше не нужен. Они имеют то же имя, что и класс, но с предшествующим символом тильды. Предсказать точно, когда будет вызван финализатор, невозможно.

Операции (operator)

Это простейшие действия вроде + или — . Об этом говорит сайт https://intellect.icu . Когда вы складываете два целых числа, то, строго говоря, применяете операцию + к целым. Однако C# позволяет указать, как существующие операции будут работать с пользовательскими классами (так называемая перегрузка операции).

Индексаторы (indexer)

Позволяют индексировать объекты таким же способом, как массив или коллекцию

Рисунок Основные понятия классов

Обозначение класса на диаграмме классов в UML.

Рисунок Обозначение класса на диаграмме классов в UML.

Представленная ниже графическая схема классов соответствует обозначениям, принятым в Унифицированном языке моделирования UML.

Рисунок Классы в учебной банковской системе

В реальности же, счета могут быть различными. Срочный вклад отличается от расчетного и от вклада до востребования. У них имеются разные характеристики, и они по-разному реализуют одни и теже операции. Поэтому для их описания нужны разные классы.

Рисунок Разделение счетов на разные классы

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

Важнейшим свойством классов в ООП и их принципиальным отличием от абстрактных типов данных (встроенных в язык программирования) являетсянаследование. Наследование — это отношение между классами, при котором один класс разделяет структуру или поведение одного или нескольких других классов.

Механизм наследования классов в ООП позволяет выделить общие части разных классов. В приведенном выше примере, были выделены разные типы счетов в банковской системе. Однако они имеют много общего. Выделив общую часть, можно создать класс «Счет». Классы «Расчетный счет» и «Депозит» сохраняют все свойства (как методы, так и атрибуты) класса «Счет», дополняя и уточняя его поведение. Говорят что класс «Депозит» наследует класс «Счет». Графически это изображается в виде иерархии.

Рисунок Схема наследования классов-счетов

Наследование классов в ООП может быть многоуровневым. Пример такой многоуровневой структуры классов-счетов представлен ниже.

Рисунок Схема многоуровневого наследования классов

Иерархию классов в ООП можно построить по-разному. Фактически иерархия классов является классификатором объектов. В данном случае при построении системы классов разработчик пытается принять во внимание следующие соображения «Столь ли существенна разница между рублевыми и валютными вкладами, что их следует разделить на различные классы?», «Разные виды Депозитов — это разные характеристики одного и того же класса или же разные классы?» и т.п.

Как видно из рисунка, представленного выше, разница между рублевым и валютным счетом настолько существенна, что они выделены в разные классы. Разные виды Депозитов также представлены разными классами. Если бы решили, что денежная единица, в которой выражается сумма на счете, — лишь дополнительны атрибут счета, и разные типы депозитов различаются дополнительной характеристикой класса «Депозит», то иерархия классов преобразовалась бы к виду, изображенному на рисунке:

Рисунок Упрощенная иерархия валютных и рублевых счетов

Важно отметить, что в ООП существует особый тип классов — абстрактные классы. Абстрактные классы — это классы для которых не существует экземпляров, они лишь описывают общие характеристики классов-потомков. В нашем случае абстрактным классом можно считать класс «Счет», т.к. фактически экземпляров данного класса не существует. Зато он используется для реализации общего интерфейса для классов-потомков.
Конкретные классы — это классы экземпляры которых могут существовать (или существуют) в системе в отличии от абстрактных классов.

Механизм абстрактных классов в ООП является чрезвычайно мощным понятием, которое широко используется. Назначением абстрактных классов в ООП является определение общих, наиболее характерных методов и атрибутов наследуемых из них классов. Чаще всего абстрактные классы используются для задания общего интерфейса иерархии конкретных классов, хотя и атрибуты, и реализация каких-либо методов могут присутствовать в абстрактных классах.

Рассмотренные до сих пор примеры показывали как класс в ООП может унаследовать методы и атрибуты одного базового класса. Такое наследование носит название одинарного или простого наследования. Наряду с ним существует и множественное наследование, при котором у одного класса имеется несколько базовых.

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

Рисунок Множественное наследование

Класс «Валютный депозит» наследует атрибуты и методы обоих своих родителей.

Рисунок основные концепции ООП

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

Инкапсуляция — это механизм, который объединяет атрибуты и методы (которые составляют объект) и предохраняет их от внешнего вмешательства. Инкапсуляция — защитная оболочка, позволяющая обращаться к атрибутам и методов класса только внутри этого класса или с помощью специально спроектированного интерфейса.

Атрибуты или методы класса могут быть открытыми (public) или закрытыми (private). Закрытые атрибуты и методы могут быть доступны только внутри класса, в котором они находятся, они не доступны той части программного кода, которая находится вне этого класса. Открытые атрибуты и методы доступны, в том числе, и кода программы вне класса. Таким образом, открытые методы используются для предоставления контролируемого интерфейса к закрытым элементов класса.

Например, представим, что у робота на голове находятся светодиоды, которые меняют цвет по голосовой команде «Измени цвет». Мы не можем ни как иначе повлиять на изменение цвета диодов, потому что этого не позволят настройки приватности. Мы можем повлиять на изменение цвета, только с помощью конкретной голосовой команды, которая в данном случае является интерфейсом к светодиодам.

Наследование помогает избежать дублирования кода в случае, если нам нужно создать объект на основе уже существующего. В этом случае говорится, что новый объект (дочерний) унаследовал свойства уже существующего (родительского). Если атрибуты или поведение существующего объекта нужно частично изменить, то их можно просто переопределить.

Например, на основе уже существующего объекта Robot мы можем создать новый объект CoffeRobot, который будет варить кофе. Новый робот будет все атрибуты и методы что и предыдущий, плюс содержать дополнительный метод «Варить кофе».

Полиморфизм

Если мы имеем объекты, которые принадлежат одной и той же ветви иерархии (были унаследованы), то для них можно использовать единый интерфейс, который будет для каждого объекта производить однотипное действие, но результат для каждого объекта будет различным (зависящим от этого конкретного объекта).

Например, если мы при помощи наследования создадим серию роботов разных типов (робот, который варит кофе; робот, который моет пол; робот, который поливает цветы), а потом каждому роботу дадим команду «работай», то каждый робот в ответ на ту же самую команду будет делать различные действия, в соответствии с его типом. То есть, единым интерфейсом здесь является объект Robot с методом «работать», а то, как именно он будет работать, зависит от его реализации.

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

В данном случае полиморфизм является ограниченным. Если сообщение «снять» будет послано, например, клиенту, он не сможет его обработать, т.е. нам не важно какой конкретно счет обрабатывает сообщение, но тем не менее это должен быть счет, объект одного из классов, выделенных из базового класса «Счет».

В большинстве случаев используется именно ограниченный полиморфизм. Тем не менее, иногда любой объект системы может обработать некоторое сообщение. Например, в языке Java у всех объектов имеется метод toString, приводящий значение объекта к строковому виду, соответственно любому объекту независимо от его класса можно послать сообщение toString.

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

Классы и
отношения между классами :


Наследования (Генерализация) — объекты дочернего класса наследуют все свойства родительского класса.

Ассоциация — объекты классов вступают во взаимодействие между собой.

Агрегация — объекты одного класса входят в объекты другого.
Композиция — объекты одного класса входят в объекты другого и зависят друг от друга по времени жизни.

Класс-метаклассы — отношение, при котором экземплярами одного класса есть другие классы.

Рисунок Нотация UML для отображения взаимосвязи между классами на диаграммах

См. также

Понравилась статья про четыре концепции ооп? Откомментируйте её Надеюсь, что теперь ты понял что такое четыре концепции ооп,определение классы,отношения между классами
и для чего все это нужно, а если не понял, или есть замечания,
то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории
Объектно-ориентированное программирование ООП

концепций Java OOP — Javatpoint

На этой странице мы узнаем об основах ООП. Объектно-ориентированное программирование — это парадигма, которая предоставляет множество концепций, таких как наследование , привязка данных , полиморфизм и т. Д.

Simula считается первым объектно-ориентированным языком программирования. Парадигма программирования, в которой все представлено как объект, известна как действительно объектно-ориентированный язык программирования.

Smalltalk считается первым действительно объектно-ориентированным языком программирования.

Популярными объектно-ориентированными языками являются Java, C #, PHP, Python, C ++ и т. Д.

Основная цель объектно-ориентированного программирования — реализовать сущности реального мира, например объект, классы, абстракцию, наследование, полиморфизм и т. Д.

ООП (система объектно-ориентированного программирования)

Объект означает реальный объект, такой как ручка, стул, стол, компьютер, часы и т. Д. Объектно-ориентированное программирование — это методология или парадигма для разработки программы с использованием классов и объектов. Он упрощает разработку и сопровождение программного обеспечения, предлагая несколько концепций:

Помимо этих понятий, в объектно-ориентированном проектировании используются и другие термины:

  • Муфта
  • Сплоченность
  • Ассоциация
  • Агрегация
  • Композиция

Объект

Любая сущность, у которой есть состояние и поведение, называется объектом.Например, стул, ручка, стол, клавиатура, велосипед и т. Д. Это может быть физическое или логическое.

Объект можно определить как экземпляр класса. Объект содержит адрес и занимает некоторое место в памяти. Объекты могут общаться, не зная подробностей данных или кода друг друга. Единственное, что необходимо сделать, — это тип принятого сообщения и тип ответа, возвращаемого объектами.

Пример: Собака — это объект, потому что у нее есть такие состояния, как цвет, имя, порода и т. Д.а также поведение, такое как виляние хвостом, лай, еда и т. д.

Класс

Коллекция объектов называется классом. Это логическая сущность.

Класс также можно определить как схему, из которой можно создать отдельный объект. Класс не занимает места.

Наследование

Когда один объект получает все свойства и поведение родительского объекта , это называется наследованием. Это обеспечивает возможность повторного использования кода.Он используется для достижения полиморфизма во время выполнения.

Полиморфизм

Если одна задача выполняется по-разному , это называется полиморфизмом. Например: убедить заказчика в другом, нарисовать что-нибудь, например, фигуру, треугольник, прямоугольник и т. Д.

В Java мы используем перегрузку методов и переопределение методов для достижения полиморфизма.

Другим примером может быть что-то сказать; например, кошка издает мяуканье, собака лает гав и т. д.

Абстракция

Скрытие внутренних деталей и отображение функциональности называется абстракцией.Например, телефонный звонок, мы не знаем внутренней обработки.

В Java мы используем абстрактный класс и интерфейс для достижения абстракции.

Инкапсуляция

Связывание (или упаковка) кода и данных вместе в единый блок называется инкапсуляцией . Например, капсула, она обернута разными лекарствами.

Класс Java — это пример инкапсуляции. Java-компонент — это полностью инкапсулированный класс, потому что здесь все члены данных являются частными.

Муфта

Связь относится к знаниям, информации или зависимости другого класса. Он возникает, когда классы знают друг о друге. Если у класса есть подробная информация о другом классе, существует сильная связь. В Java мы используем модификаторы private, protected и public для отображения уровня видимости класса, метода и поля. Вы можете использовать интерфейсы для более слабой связи, потому что нет конкретной реализации.

Сплоченность

Сплоченность относится к уровню компонента, который выполняет одну четко определенную задачу.Одна четко сформулированная задача решается очень сплоченным методом. Слабосвязный метод разбивает задачу на отдельные части. Пакет java.io представляет собой очень сплоченный пакет, поскольку он имеет классы и интерфейс, связанные с вводом-выводом. Однако пакет java.util является слабо связным пакетом, поскольку он не имеет связанных классов и интерфейсов.

Ассоциация

Ассоциация представляет собой взаимосвязь между объектами. Здесь один объект может быть связан с одним объектом или несколькими объектами.Между объектами может быть четыре типа ассоциации:

  • Один к одному
  • Один ко многим
  • Многие к одному и
  • Многие ко многим

Давайте разберемся во взаимосвязи на примерах в реальном времени. Например, в одной стране может быть один премьер-министр (один к одному), а у премьер-министра может быть много министров (один ко многим). Кроме того, у многих депутатов может быть один премьер-министр (от многих к одному), а у многих министров может быть много департаментов (от многих к многим).

Связь может быть ненаправленной или двунаправленной.

Агрегация

Агрегация — это способ достижения ассоциации. Агрегация представляет собой отношение, при котором один объект содержит другие объекты как часть своего состояния. Он представляет собой слабую связь между объектами. В Java это также называется отношением has-a . Мол, наследование представляет собой отношение — это . Это еще один способ повторного использования объектов.

Состав

Композиция — это тоже способ достижения ассоциации.Композиция представляет собой отношение, в котором один объект содержит другие объекты как часть своего состояния. Между содержащим объектом и зависимым объектом существует сильная связь. Это состояние, в котором содержащие объекты не имеют независимого существования. Если вы удалите родительский объект, все дочерние объекты будут удалены автоматически.


Преимущество ООП перед процедурно-ориентированным языком программирования

1) ООП упрощают разработку и сопровождение, тогда как в языке программирования, ориентированном на процедуры, нелегко управлять, если код растет по мере увеличения размера проекта.

2) ООП обеспечивает сокрытие данных, тогда как в процедурно-ориентированном языке программирования доступ к глобальным данным можно получить откуда угодно.

Рисунок: Представление данных в процедурно-ориентированном программировании

Рисунок: Представление данных в объектно-ориентированном программировании

3) ООП позволяет более эффективно моделировать реальные события. Мы можем предложить решение реальной проблемы со словом, если мы используем язык объектно-ориентированного программирования.


В чем разница между объектно-ориентированным языком программирования и объектно-ориентированным языком программирования?

Объектно-ориентированный язык программирования следует всем функциям ООП, кроме наследования. JavaScript и VBScript являются примерами объектно-ориентированных языков программирования.

Вы знаете?

  • Можно ли перегрузить основной метод?
  • Конструктор Java возвращает значение, но что?
  • Можно ли создать программу без основного метода?
  • Какие шесть способов использовать это ключевое слово?
  • Почему в Java не поддерживается множественное наследование?
  • Зачем использовать агрегирование?
  • Можем ли мы переопределить статический метод?
  • Что такое ковариантный тип возвращаемого значения?
  • Каковы три использования ключевого слова Java super?
  • Зачем использовать блок инициализации экземпляра?
  • Как используется пустая конечная переменная?
  • Что такое маркер или интерфейс с тегами?
  • Что такое полиморфизм времени выполнения или диспетчеризация динамических методов?
  • В чем разница между статической и динамической привязкой?
  • Как в Java возможно понижающее преобразование?
  • Для чего нужен частный конструктор?
  • Что такое клонирование объекта?

Что мы узнаем из концепций ООП?

  • Преимущество ООП
  • Соглашение об именах
  • Объект и класс
  • Перегрузка метода
  • Конструктор
  • статическое ключевое слово
  • это ключевое слово с шестью использованием
  • Наследование
  • Агрегация
  • Переопределение метода
  • Ковариантный возвращаемый тип
  • супер ключевое слово
  • Блок инициализатора экземпляра
  • последнее ключевое слово
  • Абстрактный класс
  • Интерфейс
  • Полиморфизм времени выполнения
  • Статическая и динамическая привязка
  • Понижение с помощью оператора instanceof
  • Пакет
  • Модификаторы доступа
  • Инкапсуляция
  • Клонирование объекта

концепций ООП на Java | Что такое, основы с примерами

Что такое OOPS?

Система объектно-ориентированного программирования (ООП) — это концепция программирования, которая работает на принципах абстракции, инкапсуляции, наследования и полиморфизма.Это позволяет пользователям создавать объекты, которые они хотят, и создавать методы для обработки этих объектов. Основная концепция ООП — создавать объекты, повторно использовать их в программе и манипулировать этими объектами для получения результатов.

ООП, что означает «объектно-ориентированное программирование», является широко известной и широко используемой концепцией в современных языках программирования, таких как Java.

Список концепций ООП в Java с примерами

Ниже приведены общие концепции ООП в Java:

1) Класс

Класс — это одно из основных понятий ООП, которое представляет собой группу похожих объектов.Это всего лишь логический компонент, а не физический объект. Давайте разберемся с этой одной из концепций ООП на примере: если у вас есть класс под названием «Дорогие автомобили», он может иметь такие объекты, как Mercedes, BMW, Toyota и т. Д. Его свойствами (данными) могут быть цена или скорость этих автомобилей. Хотя методы могут быть выполнены с этими автомобилями, это движение, задний ход, торможение и т. Д.

2) Объект

Объект может быть определен как экземпляр класса, и в программе может быть несколько экземпляров класса.Объект — это одна из концепций ООП Java, которая содержит как данные, так и функцию, которая работает с данными. Например — стул, велосипед, маркер, ручка, стол, автомобиль и т. Д.

3) Наследование

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

4) Полиморфизм

Полиморфизм относится к одной из концепций ООП в Java, которая заключается в способности переменной, объекта или функции принимать несколько форм. Например, в английском языке глагол run имеет другое значение, если вы используете его с , ноутбуком , a foot race и business . Здесь мы понимаем значение и на основе других слов, используемых вместе с ним. То же самое относится и к полиморфизму.

5) Абстракция

Абстракция — это одна из концепций ООП в Java, которая представляет собой акт представления основных функций без включения фоновых деталей.Это метод создания нового типа данных, который подходит для конкретного приложения. Давайте разберемся с этой одной из концепций ООП на примере: управляя автомобилем, вам не нужно беспокоиться о его внутренней работе. Здесь вам просто нужно позаботиться о таких деталях, как рулевое колесо, шестерни, акселератор и т. Д.

6) Инкапсуляция

Инкапсуляция — одна из лучших концепций ООП Java для упаковки данных и кода. В этой концепции ООП переменные класса всегда скрыты от других классов.Доступ к нему можно получить только с помощью методов их текущего класса. Например — в школе ученик не может существовать без класса.

7) Ассоциация

Ассоциация — это связь между двумя объектами. Это одна из концепций ООП в Java, которая определяет различия между объектами. В этой концепции ООП все объекты имеют отдельный жизненный цикл и нет владельца. Например, многие ученики могут общаться с одним учителем, в то время как один ученик может общаться с несколькими учителями.

8) Агрегация

В этом методе все объекты имеют отдельный жизненный цикл. Однако существует право владения, так что дочерний объект не может принадлежать другому родительскому объекту. Например, рассмотрим отдел класса / предметов и учителя. Здесь один учитель не может принадлежать к нескольким отделам, но даже если мы удалим отдел, объект учитель никогда не будет уничтожен.

9) Состав

Состав — это специализированная форма агрегирования. Их еще называют «смертельными» отношениями.У дочерних объектов нет своего жизненного цикла, поэтому при удалении родительского объекта все дочерние объекты также удаляются автоматически. Для этого возьмем дом и комнаты. В любом доме может быть несколько комнат. Одна комната не может стать частью двух разных домов. Итак, если вы удалите домашнюю комнату, она также будет удалена.

Преимущества ООП (объектно-ориентированная система программирования):

  • Концепции ООП в Java предлагают легкую для понимания и ясную модульную структуру для программ.
  • Объекты, созданные для объектно-ориентированных программ, можно повторно использовать в других программах.Таким образом, это значительно экономит затраты на разработку.
  • Большие программы сложно писать, но если команда разработчиков и разработчиков будет следовать концепциям OOPS, то они смогут лучше проектировать с минимальным количеством недостатков.
  • Повышает модульность программы, поскольку каждый объект существует независимо.

Сравнение OOPS с другими стилями программирования на примере

Давайте разберемся на примере, чем концепции Java OOP отличаются от других подходов к программированию.

Языки программирования можно разделить на 3 основных типа

  1. Языки неструктурированного программирования: Самый примитивный из всех языков программирования с последовательным потоком управления. Код повторяется во всей программе
  2. Языки структурированного программирования: Имеет непоследовательный поток управления. Использование функций позволяет повторно использовать код.
  3. Языки объектно-ориентированного программирования : объединяет данные и действие.

Щелкните здесь, если видео недоступно

Давайте разберемся с этими тремя типами на примере.

Предположим, вы хотите создать банковское программное обеспечение с такими функциями, как

  1. Залог
  2. Вывод средств
  3. Показать остаток

Языки неструктурированного программирования

Самыми ранними из языков программирования были неструктурированные языки программирования. Очень простой код банковского приложения на неструктурированном языке программирования будет иметь две переменные: один номер счета, а другой — баланс счета

.

 int account_number = 20;
int account_balance = 100; 

Допустим, внесен депозит в размере 100 долларов.

 account_balance = account_balance + 100 

Далее нужно вывести баланс счета.

 printf («Номер счета =% d, account_number)
printf («Остаток на счете =% d, account_balance) 

Сейчас снята сумма 50 долларов.

 account_balance = account_balance-50 

Опять же нужно вывести остаток на счете.

 printf («Номер счета =% d, account_number)
printf («Остаток на счете =% d, account_balance)
 

Для дальнейших операций по вводу или выводу — вы будете повторять одни и те же строки снова и снова.

Структурное программирование

С приходом структурированного программирования повторяющиеся строки кода были помещены в такие структуры, как функции или методы. При необходимости выполняется простой вызов функции.

Объектно-ориентированное программирование

В нашей программе мы имеем дело с данными или выполняем определенные операции с данными.

На самом деле, наличие данных и выполнение определенных операций с ними является основной характеристикой любой программы.

Эксперты в области программирования придумали объединить данные и операции. Таким образом, рождение объектно-ориентированного программирования, которое обычно называют OOPS.

Один и тот же код на языках объектно-ориентированного программирования будет иметь одинаковые данные и некоторые действия, выполняемые с этими данными.

 Class Account {
    int account_number;
    int account_balance;
public void showdata () {
    system.out.println («Номер счета» + account_number)
    system.outprintln («Баланс счета» + account_balance)
}
}
 

Объединив данные и действия, мы получим много преимуществ перед структурным программированием, а именно:

  • Абстракция
  • Инкапсуляция
  • Наследование
  • Полиморфизм

Они обсуждаются более подробно в последующих уроках

Четыре столпа объектно-ориентированного программирования

В этой статье я попытаюсь объяснить четыре основных принципа объектно-ориентированного программирования (ООП).Объектно-ориентированное программирование позволяет программистам думать о разработке программного обеспечения, как если бы они работали с реальными объектами. В повседневной жизни люди обладают знаниями и могут выполнять различные работы / задачи. В ООП объекты имеют поля для хранения знаний / состояния / данных и могут выполнять различные методы.

Прежде чем углубиться в четыре столпа ООП, я хотел бы остановиться на некоторых основных терминологиях.

Объект : экземпляр класса / рабочий объект класса

Класс : это модель или стандарт возможностей того, что объект может делать

Метод: Может изменять состояние класса, которое будет применяться ко всем экземплярам класса

Экземпляр : они похожи на объекты, однако давайте подумаем об этом в следующих терминах: чертеж конструкции автомобиля — это описание класса, все автомобили, изготовленные из этого чертежа, являются объектами этого класса.Ваша машина, созданная по этому чертежу, является экземпляром этого класса.

Теперь, когда мы рассмотрели эти ключевые слова, давайте перейдем к четырем принципам объектно-ориентированного программирования: инкапсуляция, абстракция, наследование и полиморфизм.

Четыре принципа объектно-ориентированного программирования (ООП):

Инкапсуляция

Инкапсуляция выполняется, когда каждый объект поддерживает частное состояние внутри класса. Другие объекты не могут напрямую обращаться к этому состоянию, вместо этого они могут вызывать только список общедоступных функций.Объект управляет своим собственным состоянием с помощью этих функций, и никакой другой класс не может его изменить, если это явно не разрешено. Чтобы общаться с объектом, вам нужно будет использовать предоставленные методы. Мне нравится думать об инкапсуляции на примере людей и их собак. Если мы хотим применить инкапсуляцию, мы делаем это, инкапсулируя всю «собачью» логику в класс Dog. «Состояние» собаки находится в частных переменных: игривость, голод и энергия, и каждая из этих переменных имеет свои соответствующие поля.

Существует также частный метод: bark (). Класс собак может вызывать это, когда захочет, а другие классы не могут сказать собаке, когда лаять. Существуют также общедоступные методы, такие как sleep (), play () и eat (), которые доступны другим классам. Каждая из этих функций изменяет внутреннее состояние класса Dog и может вызывать bark (), когда это происходит, частное состояние и общедоступные методы связываются.

Абстракция

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

Наследование

Наследование — это способность одного объекта приобретать некоторые / все свойства другого объекта.Например, ребенок наследует черты своих родителей. При наследовании возможность многократного использования является большим преимуществом. Вы можете повторно использовать поля и методы существующего класса. В Java существуют различные типы наследования: одиночное, множественное, многоуровневое, иерархическое и гибридное. Например, Apple — это фрукт, поэтому предположим, что у нас есть класс Fruit и его подкласс с именем Apple. Наше яблоко приобретает свойства класса Fruit. Другими классификациями могут быть виноград, груша, манго и т. Д. Фрукты определяют класс продуктов, которые представляют собой зрелые завязи растения, мясистые, содержащие большое семя внутри или множество крошечных семян.Подкласс Apple приобретает эти свойства от Fruit и обладает некоторыми уникальными свойствами, которые отличаются от других подклассов Fruit, таких как красный, круглый, выемчатый наверху.

Полиморфизм

Полиморфизм дает нам возможность использовать класс точно так же, как его родительский, поэтому нет путаницы со смешением типов. При этом каждый дочерний подкласс сохраняет свои собственные функции / методы такими, какие они есть. Если бы у нас был суперкласс Mammal, у которого есть метод mammalSound ().Подклассами млекопитающих могут быть собаки, киты, слоны и лошади. У каждого из них будет своя собственная итерация звука млекопитающего (лай собаки, щелчок кита).

ПОДРОБНЕЕ: Основы между GraphQL и REST API, Прототипирование и исследование UX, Диаграммы сходства и кластеризация, Создание пользовательского пользовательского интерфейса материала: Создание цветовой схемы

2 концепции ООП, которые необходимо знать в Python | Автор: Сонер Йылдырым

Наследование и полиморфизм

Фотография Зденека Махачека на Unsplash

Парадигма объектно-ориентированного программирования (ООП) построена на идее наличия объектов, принадлежащих к определенному типу.В некотором смысле тип объясняет нам объект.

Все в Python — это объект, и каждый объект имеет тип. Эти типы объявляются и определяются с помощью классов. Таким образом, классы можно рассматривать как сердце ООП.

Чтобы разрабатывать надежные и хорошо спроектированные программные продукты с помощью Python, важно получить всестороннее понимание ООП. В этой статье мы подробно рассмотрим две ключевые концепции ООП: наследование и полиморфизм.

И наследование, и полиморфизм являются ключевыми ингредиентами для разработки надежного, гибкого и простого в обслуживании программного обеспечения.Эти концепции лучше всего пояснять на примерах. Начнем с создания простого класса.

 class Employee (): def __init __ (self, emp_id, salary): 
self.emp_id = emp_id
self.salary = salary def give_raise (self):
self.salary = self.salary * 1.05

Мы создали класс под названием Employee. У него есть два атрибута данных: идентификатор сотрудника (emp_id) и зарплата. Мы также определили метод под названием give_raise. Он предусматривает 5-процентное увеличение заработной платы работника.

Мы можем создать экземпляр класса Employee (т.е. объект с типом Employee) и применить метод give_raise следующим образом:

 emp1 = Employee (1001, 56000) print (emp1.salary) 
56000emp1.give_raise () print (emp1.salary)
58800.0

ООП позволяет нам создать класс на основе другого класса. Например, мы можем создать класс Manager на основе класса Employee.

 class Manager (Employee): 
pass

В этом сценарии Manager считается дочерним классом класса Employee.Дочерний класс копирует атрибуты (как данные, так и процедурные) из родительского класса. Эта концепция называется наследованием .

Важно отметить, что наследование не означает копирование класса. Мы можем частично унаследовать от родительского (или базового класса). Python также позволяет добавлять новые атрибуты, а также изменять существующие. Таким образом, наследование дает большую гибкость.

Теперь мы можем создать объект менеджера точно так же, как мы создаем объект сотрудника.

 mgr1 = Manager (101, 75000) 
print (mgr1.salary)
75000

Дочерний класс может иметь новые атрибуты в дополнение к атрибутам, унаследованным от родительского класса. Кроме того, у нас есть возможность изменить или переопределить унаследованные атрибуты.

Давайте обновим метод give_raise, чтобы он применял 10-процентное увеличение для менеджеров.

 класс Менеджер (сотрудник): def give_raise (self): 
self.salary = self.salary * 1.10mgr1 = Manager (101, 75000)
print (mgr1.salary)
75000mgr1.give_raise ()
print (mgr1.salary)
82500

Мы создадим еще один дочерний класс класса Employee. Класс Director наследует атрибуты от класса Employee и изменяет метод give_raise с увеличением на 20 процентов.

 класс Директор (сотрудник): def give_raise (self): 
self.salary = self.salary * 1.20

Как объяснить концепции объектно-ориентированного программирования шестилетнему ребенку

Александра Петкова

Вы замечали, что одни и те же клише вопросы всегда задаются на собеседовании — снова и снова?

Я уверен, вы понимаете, о чем я.

Например:

Где вы видите себя через пять лет?

или, что еще хуже:

Что вы считаете своей самой большой слабостью?

Ух… дай мне передохнуть. Считаю ответ на этот вопрос большой слабостью! Во всяком случае, не моя точка зрения.

Какими бы тривиальными ни были подобные вопросы, они важны, потому что дают подсказки о вас. Ваше текущее состояние ума, ваше отношение, ваша точка зрения.

Отвечая, будьте осторожны, так как вы можете раскрыть то, о чем позже пожалеете.

Сегодня я хочу поговорить о подобном типе вопросов в мире программирования:

Каковы основные принципы объектно-ориентированного программирования?

Я был по обе стороны этого вопроса. Это одна из тех тем, которые задают так часто, что вы не можете позволить себе не знать.

На него обычно приходится отвечать младшим разработчикам и разработчикам начального уровня. Потому что это простой способ для интервьюера сказать три вещи:

  1. Подготовился ли кандидат к этому собеседованию?
    Бонусные баллы, если ответ услышишь сразу — это серьезный подход.
  2. Кандидат прошел этап обучения?
    Понимание принципов объектно-ориентированного программирования (ООП) показывает, что вы вышли за рамки копирования и вставки из руководств — вы уже видите вещи с более высокой точки зрения.
  3. Понимание кандидата глубокое или поверхностное?
    Уровень компетенции по этому вопросу часто равен уровню компетенции по большинству других предметов . Поверьте мне.

Как выглядит разработчик начального уровня после ответа на этот вопрос!

Четыре принципа объектно-ориентированного программирования: инкапсуляция , абстракция , наследование , и полиморфизм .

Эти слова могут показаться пугающими для начинающего разработчика. А сложные, чрезмерно длинные объяснения в Википедии иногда удваивают путаницу.

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

Инкапсуляция

Допустим, у нас есть программа. Он имеет несколько логически разных объектов, которые взаимодействуют друг с другом в соответствии с правилами, определенными в программе.

Инкапсуляция достигается, когда каждый объект сохраняет свое состояние private внутри класса. Другие объекты не имеют прямого доступа к этому состоянию. Вместо этого они могут вызывать только список общедоступных функций, называемых методами.

Итак, объект управляет своим собственным состоянием с помощью методов — и никакой другой класс не может коснуться его, если явно не разрешено. Если вы хотите общаться с объектом, вы должны использовать предоставленные методы. Но (по умолчанию) вы не можете изменить состояние.

Допустим, мы создаем крошечную игру Sims.Есть люди и есть кошка. Они общаются друг с другом. Мы хотим применить инкапсуляцию, поэтому мы инкапсулируем всю логику «cat» в класс Cat . Это может выглядеть так:

Кошку можно покормить. Но вы не можете напрямую изменить степень голода кошки.

Здесь «состояние» кота — это частные переменные настроение , голод и энергия . Он также имеет частный метод meow () . Он может вызывать его, когда захочет, другие классы не могут сказать кошке, когда мяукать.

Их возможности определены в публичных методах sleep () , play () и feed () . Каждый из них каким-то образом изменяет внутреннее состояние и может вызывать meow () . Таким образом, выполняется привязка между частным состоянием и общедоступными методами.

Это инкапсуляция.

Абстракция

Абстракцию можно рассматривать как естественное расширение инкапсуляции.

В объектно-ориентированном дизайне программы часто бывают очень большими.А отдельные объекты много общаются друг с другом. Так что поддерживать такую ​​большую кодовую базу в течение многих лет — с постоянными изменениями — сложно.

Абстракция — это концепция, призванная облегчить эту проблему.

Применение абстракции означает, что каждый объект должен только предоставлять высокоуровневый механизм для его использования.

Этот механизм должен скрывать внутренние детали реализации. Он должен раскрывать только операции, относящиеся к другим объектам.

Думаю — кофеварка.Он много чего делает и издает причудливые звуки под капотом. Но все, что вам нужно сделать, это налить кофе и нажать кнопку.

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

Еще один реальный пример абстракции?
Подумайте, как вы используете свой телефон:

Сотовые телефоны сложны. Но пользоваться ими просто.

Вы взаимодействуете со своим телефоном, используя всего несколько кнопок.Что происходит под капотом? Вам не обязательно знать — детали реализации скрыты. Вам нужно знать лишь небольшой набор действий.

Изменения реализации — например, обновление программного обеспечения — редко влияют на используемую вами абстракцию.

Наследование

Хорошо, мы увидели, как инкапсуляция и абстракция могут помочь нам разработать и поддерживать большую кодовую базу.

Но знаете ли вы, что является еще одной распространенной проблемой в дизайне ООП?

Объекты часто очень похожи. У них общая логика.Но они не совсем те же . Ух…

Так как же нам повторно использовать общую логику и выделить уникальную логику в отдельный класс? Один из способов добиться этого — наследование.

Это означает, что вы создаете (дочерний) класс, производя его от другого (родительского) класса. Таким образом, мы формируем иерархию.

Дочерний класс повторно использует все поля и методы родительского класса (общая часть) и может реализовать свою собственную (уникальную часть).

Например:

Частный учитель — это тип учителя.А любой учитель — это тип Человека.

Если нашей программе необходимо управлять государственными и частными учителями, а также другими типами людей, такими как студенты, мы можем реализовать эту иерархию классов.

Таким образом, каждый класс добавляет только то, что для него необходимо, при повторном использовании общей логики с родительскими классами.

Полиморфизм

Мы подошли к самому сложному слову! Полиморфизм в переводе с греческого означает «множество форм».

Итак, мы уже знаем силу наследования и с радостью ею пользуемся.Но возникает такая проблема.

Допустим, у нас есть родительский класс и несколько дочерних классов, которые наследуются от него. Иногда мы хотим использовать коллекцию, например список, которая содержит смесь всех этих классов. Или у нас есть метод, реализованный для родительского класса, но мы хотели бы использовать его и для детей.

Это можно решить с помощью полиморфизма.

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

Обычно это происходит путем определения (родительского) интерфейса для повторного использования. В нем описывается ряд общих методов. Затем каждый дочерний класс реализует свою собственную версию этих методов.

Каждый раз, когда коллекция (например, список) или метод ожидает экземпляр родительского объекта (где описаны общие методы), язык заботится об оценке правильной реализации общего метода — независимо от того, какой дочерний элемент передан.

Взгляните на эскиз реализации геометрических фигур. Они повторно используют общий интерфейс для вычисления площади поверхности и периметра:

Треугольник, Круг и Прямоугольник теперь можно использовать в одной коллекции

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

Затем, если этот список пытается вычислить поверхность для элемента, правильный метод будет найден и выполнен.Если элемент является треугольником, вызывается функция треугольника CalculateSurface () . Если это круг, то вызывается функция круга CalculateSurface () . И так далее.

Если у вас есть функция, которая работает с фигурой, используя ее параметр, вам не нужно определять ее три раза — один раз для треугольника, круга и прямоугольника.

Вы можете определить его один раз и принять в качестве аргумента фигуру . Передаете ли вы треугольник, круг или прямоугольник — если они реализуют CalculateParamter () , их тип не имеет значения.

Надеюсь, это помогло. Вы можете напрямую использовать те же самые объяснения на собеседовании.

Если вам что-то все еще сложно понять — не стесняйтесь спрашивать в комментариях ниже.

Что дальше?

Быть готовым ответить на один из самых популярных вопросов на собеседовании — это здорово, но иногда вас никогда не вызывают на собеседование.

Далее я сосредоточусь на том, что работодатели хотят видеть в младшем разработчике и как выделиться из толпы при поиске работы.

Следите за обновлениями.

Понравилось прочитанное? Если вы хотите поддержать меня, вы можете купить мне кофе 🙂

Что такое инкапсуляция в ООП?

Что такое инкапсуляция?

Инкапсуляция в ООП Значение : В объектно-ориентированных языках программирования понятие инкапсуляции (или инкапсуляции ООП) относится к объединению данных вместе с методами, которые работают с этими данными, в единый блок. Многие языки программирования часто используют инкапсуляцию в виде классов .Класс — это шаблон кода программы, который позволяет разработчикам создавать объект, который имеет как переменные (данные), так и поведения (функции или методы). Класс — это пример инкапсуляции в информатике, поскольку он состоит из данных и методов, объединенных в единое целое.

Инкапсуляция может также относиться к механизму ограничения прямого доступа к некоторым компонентам объекта, так что пользователи не могут получить доступ к значениям состояния для всех переменных конкретного объекта.Инкапсуляция может использоваться, чтобы скрыть как элементы данных, так и функции или методы данных, связанные с созданным экземпляром класса или объекта.

Наследование против абстракции против инкапсуляции: в чем разница?

Наряду с наследованием, инкапсуляция и абстракция образуют три основных принципа объектно-ориентированного программирования.

Что такое наследование в программировании?

Наследование — это механизм, который позволяет одному классу получать свойства другого класса точно так же, как потомок наследует некоторые атрибуты от каждого из своих родителей.Наследование позволяет программистам создавать новый класс, который повторно использует элементы данных и методы существующего класса.

Что такое абстракция в программировании?

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

В популярном тексте по программированию Объектно-ориентированный анализ и дизайн Грэди Буч пишет, что:

«Абстракция и инкапсуляция — это взаимодополняющие концепции: абстракция фокусируется на наблюдаемом поведении объекта … инкапсуляция фокусируется на реализации, которая вызывает это поведение»

Другими словами, абстракция относится к тому, как объект и его поведение представляются пользователю, а инкапсуляция — это методология, которая помогает создать этот опыт.

Подумайте об интерфейсе вашего мобильного телефона. Независимо от того, используете ли вы операционную систему Android или iOS, вы не взаимодействуете напрямую с кодом, который позволяет вашему телефону подключаться к Интернету, отправлять текстовые сообщения или играть в видеоигры. Вместо этого вы взаимодействуете с кодом через пользовательский интерфейс, который призван упростить работу и упростить доступ к функциям и методам, необходимым для выполнения задачи. В этом случае интерфейс абстрагируется от фактической реализации кода.

Объяснение инкапсуляции в ООП и контейнеризации

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

Инкапсуляция в ООП: контейнеры против виртуальных машин

Контейнеризация появилась как альтернатива виртуальным машинам из-за высокоэффективного использования вычислительных ресурсов. Виртуализация позволила нескольким операционным системам и приложениям работать одновременно, разделяя ресурсы одного компьютера. Контейнеры улучшили эту модель за счет совместного использования операционной системы хоста и установки механизма выполнения контейнера на операционную систему хост-машины.

Компьютер с четырьмя виртуальными машинами требует дополнительных ресурсов для каждого экземпляра операционной системы, который он запускает, в то время как компьютер с установленным механизмом контейнеризации может запускать такое же количество приложений в одной операционной системе. В результате несколько контейнеров могут работать, используя ту же вычислительную мощность, что и одна виртуальная машина.

Контейнеры — это всего лишь один пример инкапсуляции в кодировании, когда данные и методы объединяются в единый пакет.

Как информация скрывается с помощью программирования инкапсуляции?

Как мы упоминали ранее, инкапсуляция в объектно-ориентированном программировании позволяет разработчикам объединять данные и методы вместе, но ее также можно использовать для скрытия конфиденциальных данных, которые не должны быть открыты пользователям. В языке программирования Java и во многих других языках скрытие информации управляется с помощью методов получения / установки для атрибутов данных, которые будут доступны для чтения или которые могут обновляться другими классами.

Инкапсуляция в ООП: методы получения / установки

Метод получения используется для получения значения определенной переменной в классе. Метод установки используется для установки или обновления значения конкретной переменной в классе. Программисты могут использовать модификаторы доступа для определения видимости и доступности классов, а также данных и методов, которые они содержат. В языке программирования Java есть четыре типа модификаторов доступа на выбор:

  • Private — Когда модификатор частного доступа применяется к атрибуту или методу, доступ к нему можно получить только с помощью кода в том же классе.В результате класс, вероятно, должен будет включать методы получения и установки, которые можно использовать для доступа к информации об атрибуте или для изменения его значения. Переменные, к которым можно получить доступ только через вызовы геттеров и сеттеров, инкапсулируются.
  • Защищено — Доступ к защищенной переменной или методу может получить код в том же классе, любые классы, находящиеся в том же пакете, и все подклассы в том же или других пакетах.
  • Public — Модификатор общего доступа является наименее ограничивающим из всех.Методы, атрибуты и классы, которые закодированы с помощью этого модификатора доступа, можно просматривать и получать к ним доступ с помощью кода в том же классе и во всех других классах.
  • Без модификатора — Когда переменная не имеет модификатора доступа, к ней можно получить доступ или просмотреть из того же класса или из всех других классов в том же пакете.

Скрытие информации об атрибутах и ​​методах с помощью инкапсуляции в программировании дает множество преимуществ. Во-первых, это мешает другим разработчикам писать сценарии или API, использующие ваш код.При инкапсуляции пользователи класса не узнают, как класс хранит свои данные, и разработчик может изменить тип данных поля, не заставляя разработчиков и пользователей класса изменять свой код.

Инкапсуляция в ООП и Sumo Logic помогает предотвратить кибератаки

ИТ-организации могут реализовать инкапсуляцию как способ защиты конфиденциальных данных и соблюдения отраслевых требований к безопасности и конфиденциальности данных, таких как HIPAA и PCI DDS.Процесс инкапсуляции помогает разделить данные, ограничивая уязвимости, предоставляя пользователям информацию о реализациях кода исключительно по мере необходимости.

Sumo Logic дополняет существующие меры кибербезопасности передовыми средствами обнаружения угроз и аналитикой безопасности на основе искусственного интеллекта.

Полная видимость для DevSecOps

Сократите время простоя и перейдите от реактивного к упреждающему мониторингу.

объектно-ориентированного программирования на Python | Holberton School

Инкапсуляция, абстракция, полиморфизм, наследование.Также известен как «четыре столпа ООП».

Инкапсуляция

В объектно-ориентированной программе вы можете ограничить доступ к методам и атрибутам определенного класса. Это предотвращает случайную модификацию данных и нежелательные изменения и известно как инкапсуляция .

В Python мы можем создавать частные атрибуты и методы, используя __ . Эти методы недоступны вне класса (отчасти это правда — подробнее здесь). Мы можем проверить, является ли метод закрытым, попытавшись получить к нему доступ:

Класс

 PrivateMethod:
    def __init __ (сам):
        себя.__attr = 1
    def __printhi (сам):
        печать ("привет")
    Def printhello (self):
        print ("привет")

a = PrivateMethod ()
a.printhello ()
а .__ printhi ()
a .__ attr

  Вывод: 
Привет
AttributeError: объект 'PrivateMethod' не имеет атрибута '__printhi'
AttributeError: объект PrivateMethod не имеет атрибута __attr
 

Как мы видим, метод и атрибут как будто не существуют, поэтому мы получаем ошибку.Чтобы получить доступ и изменить частные атрибуты , мы используем методы получения и установки (getter — получить атрибут, setter — установить атрибут):

 Класс Лицо:
    def __init __ (я, имя, возраст):
        self.name = имя
        self .__ age = возраст
    @имущество
    def age (self):
        print ("Получение возраста {} ...". format (self.name))
        вернуть себя .__ возраст
    @ age.setter
    def age (self, value):
        если тип (значение) не является целым:
            Raise TypeError ("Возраст должен быть числом")
        Если значение <0:
            Raise ValueError («Возраст не может быть отрицательным»)
        print ("Установка {} в {}... ". формат (собственное имя, значение))
        self .__ age = возраст
 

У этих методов есть нечто, называемое декораторами , которое сообщает интерпретатору, что следующий метод будет особенным.

В этой программе мы используем два декоратора, свойство и <атрибут> .setter .

Декоратор @property определяет метод получения, функцию класса, которая будет возвращать частный атрибут. Имя метода должно совпадать с именем атрибута.

Декоратор @ .setter определяет метод установки, функцию flash, которая присваивает новое значение частному атрибуту. Также здесь имя метода должно совпадать с именем атрибута, и нам также необходимо принять новый параметр, который будет новым значением атрибута, и проверить, является ли значение допустимым (в этом случае мы выдаем ошибку, если это не так).

Мы можем протестировать этот код как таковой:

 adam = человек ("адам", 48)
ethan = Человек ("этан", 20)
Адам.возраст
ethan.age
adam.age = 50
ethan.age = 21
  Выход 
Получение возраста Адамса ...
49
Получение возраста Итана…
50
Установка возраста Адамса на 50 ...
Установка возраста Этанса на 21 ...
 

На мой взгляд, это очень эффектно. Нам не нужно вызывать методы getter или setter , интерпретатор точно знает, что вызывать в каждой ситуации! Также обратите внимание на то, что каждый экземпляр содержит свой атрибут с тем же именем, но разными значениями.Эти два атрибута экземпляра не имеют ничего общего друг с другом!

Абстракция

Этот принцип менее физический (программируемый), но более логичный. Абстракцию можно рассматривать как естественное расширение инкапсуляции.

В какой-то момент наши программы становятся очень большими, с различными классами, которые используют друг друга. Чтобы наша программа была максимально логичной и простой - мы применяем абстракцию к нашим классам. Это означает, что каждый класс должен только раскрывать свои механизмы, которые должны быть общедоступными.

Давайте взглянем на объект, с которым вы, вероятно, знакомы: кофеварку. Все, что нам нужно сделать, это нажать кнопку, и - вуаля! Кофе выходит. Нас не интересуют все шумы и процессы, происходящие в задней части кофемашины, мы просто хотим наш кофе.

То же и с классом! Все «закулисные» механизмы должны быть инкапсулированы и оставлены частными, чтобы не создавать путаницы при работе со многими классами одновременно.

Наследование

Часто наши классы будут взаимодействовать друг с другом, и мы можем даже захотеть, чтобы конкретный класс был подклассом какого-то другого класса.

Это легко понять на простом примере. Допустим, мы создаем некую базу данных для хранения всех сотрудников университета. Некоторые из них являются студентами, а некоторые - сотрудниками, но все разделяют класс Person . Давайте создадим класс Person :

 класс Человек:
    def __init __ (я, имя, фамилия):
        self.name = имя
        self.lastname = фамилия
    def print_person (сам):
        Распечатать("{} {}".формат (self.name, self.lastname))
 

У каждого человека есть два атрибута: имя и фамилия.
Каждый ученик и сотрудник школы унаследуют класс Человек , если все они люди 😃:

 класс Сотрудник (человек):
    def __init __ (я, имя, фамилия, идентификатор сотрудника):
        super () .__ init __ (я, имя, фамилия)
        self.employee_id = employee_id
    def print_employee (сам):
        print ("Меня зовут: {} {}, номер сотрудника: {}".формат (self.name, self.lastname, self.employee_id))
    
    класс Студент (Человек):
    def __init __ (я, имя, фамилия, студент_id):
        super () .__ init __ (я, имя, фамилия)
        self.student_id = student_id
    def print_student (сам):
        print ("Меня зовут: {} {}, номер студента: {}". format (self.name, self.lastname, self.student_id))
 

При определении класса, наследующего другой класс, нам необходимо включить суперкласс в определение нового класса.Чтобы использовать суперкласс внутри подкласса, мы могли бы использовать функцию super () с соответствующими параметрами. В Python мы можем вызывать родительский класс несколькими способами, и это только один из них.

Строка super () .__ init __ (я, имя, фамилия) также может быть записана как: Лицо .__ init __ (я, имя, фамилия) . Во втором случае мы вызываем функцию инициализации прямо из класса.

Полиморфизм

Полиморфизм описывает ситуации, в которых что-то появляется в разных формах.В ООП это означает, что объекты определенного класса могут использоваться, как если бы они принадлежали другому классу. Эта концепция наиболее объяснима на примере. Возьмем два класса: Dog и Cat , которые наследуют родительский класс Animal .

 класс Животное:
    def eat (self):
        print ("{} ест медленно" .format (self .__ class __.__ name__))
    
класс Dog (Животное):
    def eat (self):
        print ("Собака очень быстро ест")
    
класс Cat (Животное):
    проходить
 

Теперь мы можем создать экземпляры этих классов в двух объектах и ​​запустить метод.

 jack = Собака ()
jill = Кот ()
jack.eat ()
jill.eat ()
  Выход 
"Собака ест очень быстро"
«Кот медленно ест»
 

Здесь происходит что-то особенное - мы перезаписываем метод. В родительском классе мы печатаем, используя self .__ class __.__ name__ . У каждого класса есть список встроенных методов, которые мы можем использовать для получения разных вещей. В этом случае мы используем метод __class __.__ name__ для получения имени текущего класса.

Существуют две разные версии метода eat ; Один в классе Animal и один в классе Dog . Когда у нас есть наследование, программа сначала будет искать вызываемый метод в своем собственном классе. Если он недоступен, он будет искать в унаследованных классах. В этом случае у нас есть другое определение eat в классе Dog , поэтому вызывается этот метод, а не родительский.

Настоящий пример, демонстрирующий полиморфизм, - это итерация по разным объектам:

 для животных в (джек, джилл):
    животное.есть()

  Вывод: 
«Собака очень быстро ест»
«Кот медленно ест»
 

Цикл for сначала выполняет итерацию по созданию экземпляра класса Dog , а затем - класса Cat . Вот почему мы видим результат метода Dogs до методов Cats .

Такой доступ к методам класса (полиморфный способ) показывает, что Python не заботится о том, к какому классу принадлежит объект, он просто выполняет свои методы (при условии, что они существуют в классе).

Заключение

В этой статье мы рассмотрели основы объектно-ориентированного программирования и четыре основных принципа. Я уверен, что это похоже на большой объем информации, который может быть трудно полностью усвоить, но как только вы усвоите основы, все остальное станет легче.

Объектно-ориентированное программирование имеет много преимуществ по сравнению с процедурным программированием, и с этого момента вы можете начать программировать таким образом.

Я бы порекомендовал почитать немного больше об ООП и попытаться запрограммировать некоторые основы (большие проблемы для новичков).

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *