полиморфизм ооп



Полиморфизм java

Автор Sooqua задал вопрос в разделе Другие языки и технологии

ООП: что такое инкапсуляция, абстракция, полиморфизм и наследование? и получил лучший ответ

Ответ от Jurijus Zaksas[гуру]
инкапсуляция - включение в класс данных (или других классов) с ограничением доступа к ним. Например, класс "ведро" может инкапсулировать в себе класс "мусор" и предоставлять методы "добавить мусора" и "опустошить ведро", но не давать никому трогать сам "мусор".
абстракция - представление объекта реального мира в виде абстракции, урезанной до его функциональности в некотором контексте. Еще может иметься ввиду возможность определять заголовки методов без их реализации, но это вряд ли. Смотри пример с ведром. Если с точки зрения задачи мусор трогать нельзя, эта функция не реализуется.
полиморфизм - изменение/дополнение поведения класса-предка классами-потомками. Например, класс "ведро" имеет виртуальный метод "опустошить ведро", вызывающий приватный метод "перевернуть ведро". А класс "ведро с крышкой" - наследник класса "ведро" - может переопределить метод "опустошить ведро": сначала вызвать приватный метод "открыть крышку", потом - метод предка "опустошить ведро", потом - приватный метод "закрыть крышку".
наследование - наследование это наследование. Наследование потомками методов предков. Класс "ведро с крышкой" - наследник класса "ведро" - унаследует все его защищенные и публичные методы, например "добавить мусора" и "опустошить ведро".

Ответ от Капитан Гугл[гуру]
Разжеванней, чем в вики? Это как?
На пальцах - могу: инкапсуляция - не пускаем пользователя (т. е. другого программиста) к данным мимо наших функций; абстракция - представляем объект в виде некоторой урезанной по предметной области модели (неожиданно, да?) ; наследование - потомки сохраняют функциональность родителей; полиморфизм - конкретная функция определяется по типу объекта во время работы программы.
Что непонятно?

Ответ от Богдан Мельниченко[новичек]
Инкапсуляция - это скрытие реализации для пользователя. Наведу пример автомобиля. В автомобиле есть коробка передач, есть система управления и т. д. Эти элементы взаимодействуют с внутренними элементами, но для того чтобы тебе ехать, не обязательно знать как там все работает, тебе главное нажать на педали, включить передачу и ехать, а вот как оно все работает уже скрыто от тебя. вот это и есть ИНКАПСУЛЯЦИЯ, тоесть скрытие как работает автомобиль (скрытие реализации).
Абстракция - это такое понятие которое как бы разделяет физическое состояние от так сказать вымешленного.
Например у тебя есть идея создать какой нибудь объект. Ты на листе рисуешь его составные, придумываешь как они будут взаимодействовать между собой, придумываешь какие действия будут от пользователя скрыты, тоесть инкапсулируешь их. тоесть ты создаешь абстракцию своей идеи, своего объекта, тоесть он еще не является физическим а только вымешленным. Вот приблизительно что такое абстракция.
Наследованния - это такое явление которое расширяет объекты. НАпример тот же автомобиль. Компания создала автомобиль например BMW X7. но через год эта компания хочет создать похожую модель но добавить туда некоторые возможности. Да, они могут начать создание заново, но для этого у них уйдет много времени. Для того чтобы им это не делать, они просто берут эту же модель и добавляют ей необходимые функции. ТОесть новый автомобиль будет унаследовать все то что было и у предшественника+со своими возможностями. Также само посмотреть с урока биология. есть класс ЖИВОТНЫЕ - это как бы общее понятие всех животных (все животные могут есть, пить, размножатся). Ниже по иерархии стоит например класс Собачьи которые расширяют какбы класс животные. они могут есть, пить, размножатся как и все животные, приэтом собаки могут еще и лаять, что не все могут животные.. ТОесть собачьи класс унаследован (расширен) от класса Животные.
Полиморфизм - это так называемый принцип в котором при одной какой то форме действий могут выполнятся различные реализации. Например в том же автомобиле. У всех есть педали (газ, тормоз, сцепление). Как бы у всех машин есть единый интерфейс, тоесть когда жмешь газ - машина едет, когда тормоз тормозит. Но в разных машинах при нажатии на одну и ту же педаль выполняются разные реализации. Одна набирает скорость быстрей, одна тормозит быстрей. Тоесть ПОлиморфизм - это один интерфейс, много действий (реализаций)
Все эти 4 принципа ООП, применяются в программировании и есть очень полезными и удобными.

Ответ от Gregory[новичек]
на сколько я знаю инкапсуляция это вид доступа к переменной свойству или методу

Ответ от Александр Свиридов[гуру]
Инкапсуляция - это когда у содержимого класса зона видимости (public, private, ..) объявлена как private и не видна извне. Такое делают для того чтобы реализовать функциональность самого класса, а public члены нужны для доступа к классу из других классов. Просто так удобнее сопровождать код, он не завязан узлом.

Абстракция, полиморфизм - это значит что разные классы могут иметь один и тот же набор публичных методов. Обычно это реализуется путём создания интерфейса (простейшее описание перечня методов). Дальше этот интерфейс добавляется ко всем классам. И в последствии получается что любой класс от части является и этим интерфейсом. Вы сможете любой класс привести к типу данных = интерфейсу, и соответственно разные классы с разным содержимым будут вести себя как один и тот же тип данных. Разные классы можно скормить методу принимающему на вход класс только одного типа. Лишь бы этот тип был реализован во всех разнородных классах.

При наследовании функциональность класса расширяется. Можно класс унаследовать от интерфейса, можно от любого другого объекта. В C++ поддерживается наследование от 2 классов сразу! А в C# только от одного класса и любого кол-ва интерфейсов. Класс всегда можно рассматривать как базовый. Ну к примеру, вы узнали о существовании абстрактного класса Stream. И знаете что много процедур принимают объект типа Stream. У вас появляется идея как осуществить вызов такого метода передав в него свои уникальные данные. Просто написать нового наследника от класса Stream и переопределить в нём все методы. Получаем некий новый класс MyStream, который также легко приводится к базовому типу Stream. Ну примерно также как int легко приводится к long. Процедура получает экземпляр класса MyStream но она к нему относится так будто это Stream. Не учитывает ваши доработки. А вы в свою очередь позаботились чтобы ваш MyStream чётко соответствовал идеологии Stream.
Идеология ООП выходит очень далеко за понятие самой теории ООП. Примерно также как русский язык не описывает всего многообразия мыслей, не передаёт смысла будущих текстов.
На ООП существует много паттернов, их можно не любить но применяют их постоянно.
Рано или поздно вы спросите у друга программиста "а как мне сделать ..." и он вам сообщит некое сочетание приёмов программирования базирующееся на классах.
ООП плохо реализовано во всех скриптовых языках, так как там типизация не строгая.

Ответ от Haidarovgde[гуру]
ходи на занятия

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: ООП: что такое инкапсуляция, абстракция, полиморфизм и наследование?
Абстракция данных на Википедии
Посмотрите статью на википедии про Абстракция данных
Инкапсуляция программирование на Википедии
Посмотрите статью на википедии про Инкапсуляция программирование
Исмаилов Тельман Марданович на Википедии
Посмотрите статью на википедии про Исмаилов Тельман Марданович
Объектно-ориентированное программирование на Википедии
Посмотрите статью на википедии про Объектно-ориентированное программирование
Полиморфизм информатика на Википедии
Посмотрите статью на википедии про Полиморфизм информатика
Портал Динозавры Реконструкции видов динозавров на Википедии
Посмотрите статью на википедии про Портал Динозавры Реконструкции видов динозавров
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*