Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/84: Рейтинг темы: голосов - 84, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 20

Объясните понятие ООП

13.02.2020, 23:25. Показов 21494. Ответов 242

Студворк — интернет-сервис помощи студентам
Скажите пожалуйста понятным языком, что такое объектно-ориентированное программирование ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2020, 23:25
Ответы с готовыми решениями:

Понятие ООП
Доброго времени суток! Пытаюсь вникнуть в ООП после длительного написания кода в процедурном стиле, и это не так просто =( Хочу...

Объясните понятие изоморфизма двух алгебр (на примере)
Кто нибудь, объясните мне понятие изоморфизма двух алгебр на примере. Или дайте источник информации (я искал -- толкового ничего не нашёл)....

Дать понятие понятие НОК в кольце целых чисел
Дать понятие понятие НОК в кольце целых чисел.

242
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
25.05.2020, 11:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taancer Посмотреть сообщение
Также, главным признаком ООП, отличающим ООП от всех других парадигм, является полиморфизм - это возможность вызывать реализованные методы потомков используя переменную типа класса-предка.
Полиморфизм бывает разный. В ООП это полиморфизм подтипов.
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
06.08.2020, 22:49
Вот что пишет Вики:
Паради́гма программи́рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером[1].

Парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование).
При таком определении само понятие, определение "парадигмы" как-то вырождается в "стиль написания кода".
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
07.08.2020, 10:21
Парадигмы:

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

При чем тут
Цитата Сообщение от vvm28 Посмотреть сообщение
"стиль написания кода"
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
07.08.2020, 12:10
vantfiles, Это все хорошо. Вы перечислили названия. Но я говорил в своем высказывании об определении "Паради́гма программи́рования", как его преподносит вики.

Добавлено через 25 минут
В общем-то я к чему это все написал. К тому что некоторое неполное определение или не достаточно и в общих чертах поставленная задача может приводить к недопониманию. Такое часто происходит когда заказчик что-то подразумевает или
говорит, но в том контексте который для него "само собой разумеющееся", потому что он работает в этом узком направлении. Такое недопонимание может происходить когда менеджер по найму задает некоторые общие вопросы, но подразумевает некоторое узкое направление использования.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,816
07.08.2020, 21:53
ООП - это объединение под общим именем (именем объекта) переменных, функций и других объектов. Рекурсивное определение.

А всякие там наследования и полиморфизмы - это не суть.
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
08.08.2020, 11:43
Основные принципы ООП:
Наследование
Абстракция
Инкапсуляция
Полиморфизм
Можно от этого отталкиваться чтобы вывести правильное определение ООП.
Но в программировании и в проектировании основная сложность: Мы что-то делаем идя от общего к частному, или от частного к общему. Это достаточно трудный момент.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
08.08.2020, 12:39
Я не помню, откуда взял этот FAQ, но мне он кажется достаточно четким и полным:

Кликните здесь для просмотра всего текста

ООП - это...

1. Что такое объектно-ориентированное программирование?
Это модель языка программирования организованая вокруг объектов, а не действий и данных, а не логики.

2. Что такое объект в ООП?
Объект называется экземпляром класса, и он имеет свое собственное состояние, поведение и идентичность.

3. Что такое класс в ООП?
Класс - это представление типа объекта. Это план / шаблон, которые описывают детали объекта.

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

5. Каковы базовые принципы ООП?
Абстракция.
Инкапсуляция.
Наследование.
Полиморфизм.

6. Что такое инкапсуляция?
Инкапсуляция - это значит ограничивать доступ одних компонентов программы к другими, скрывая детали реализации; это то, как мы определяем видимость свойств и методов класса используя модификаторы доступа:

public: публичный, общедоступный. Свойства и методы, объявленные с модификатором public, видны другим классам.
private: закрытый, противоположность модификатору public. Закрытый класс или член класса доступен только из кода в том же классе.
protected: доступ разрешон только внутри самого класса и наследующим его классам.

7. Что такое наследование?
Наследование это концепция, в которой один класс разделяет структуру и поведение, определенные в другом классе. Класс наследник создаёться на основе уже существующего класса - родитель (базовый) - сохраняя эго функциональность не копируя код и имея возможность менять или добавить дополнительную функциональность.

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

9. Что такое полиморфизм?
Греческий термин, чем означает способность принимать другую форму. Он реализуется в виде перегрузки методов и перегрузки операторов (в С++). Это сопоставление поведения или значения в подклассе тому, что уже было объявлено в базовым классе.

10. Что такое интерфейс в ООП?
Интерфейс коллекция методов которых должен реализовать класс, без необходимости определять, как эти методы обрабатываются. Тела этих методов должны быть public и пустыми в интерфейсе. Все методы из интерфейса должны быть реализованы в классе. А сам класс может реализовать более одного интерфейса.

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

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

Композиция это сильная ассоциация - содержащийся объект полностью зависит от объекта контейнера.

Агрегация это слабая ассоциация - содержащийся объект не зависит от объекта контейнера.

13. Что такое конструктор и зачем он нужнен?
Конструктор - это метод, используемый для инициализации состояния объекта, и он запускается при создании объекта.

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

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

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

14. Что такое деструктор и зачем он нужнен?
Деструктор - это метод, который автоматически вызывается, когда объект уничтожается. Имя деструктора совпадает с именем класса, но с символом тильды перед именем (а в PHP - __destruct). Как и конструктор, деструктор используеться когда есть действия которые должны выполнться иммено на этом этапе.

15. Что такое static?
Модификатор static определяет члены классов которые разделяются всеми экземплярами этого класса и хранятся в одном месте. Нестатические элементы данных создаются для каждой переменной объекта класса. Статические функции могут обеспечивать функциональность, относящуюся к определенному классу, не требуя от программиста сначала создать экземпляр этого класса. Неспособность объявить статические члены класса привела бы к необходимости объявлять эти данные на глобальном уровне программы.

16. Разница между overloading (перегрузкой) и overriding (переопределением)?
Overloading означает наличие двух методов с тем же именем метода и параметрами. Один из методов находится в родительском классе, а другой - в дочернем (класс-наследник). Перегрузка это пример полиморфизма во время выполнения.

Overriding возникает, когда два или более метода в одном классе имеют одно и то же имя метода, но разные параметры. Переопределения это пример полиморфизма во время компиляции.

17. Что такое указатель THIS?
Указатель THIS относится к текущему объекту класса. THIS используется как указатель, который отличает текущий объект от глобального объекта. Этот указатель существует всюду внутри класса, его не надо как-то явно объявлять, к нему можно обращаться внутри любого метода класса.

18. Что такое namespace в ООП?
Namespace - пространство имен - обеспечивает способ группировки связанных классов, интерфейсов, функций и констант. Нужен для организации кода в логические группы и предотвращения конфликтов имен, которые могут возникнуть, когда код включает в себя несколько библиотек с теми же названиями классов. Абстрактно говоря это способ инкапсуляции элементов.

19. Что такое геттеры(getters)/сеттеры(setters)?
Это методы для установления и получения значения приватных свойств класса. Другими словами getters и seters инкапсулируют поля класса, делая их доступными только через свои общедоступные методы, сохраняя сами значения приватными (private).

20. Что такое клонирование в ООП?
Клонирование относится к созданию точной копии объекта, это процесс создания другой точной копии объекта а не только ссылки на него.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,816
09.08.2020, 09:43
Цитата Сообщение от vvm28 Посмотреть сообщение
Можно от этого отталкиваться чтобы вывести правильное определение ООП.
Зачем? Я же дал очень простое определение без наследования и полиморфизма, обозначил действительно важные вещи.

Добавлено через 2 минуты
Объект - это когда ты пишешь в программе object.variable и object.function().

Наследования и абстракции - это то, чего может не быть в ООП.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
09.08.2020, 15:07
Цитата Сообщение от vantfiles Посмотреть сообщение
Я не помню, откуда взял этот FAQ, но мне он кажется достаточно четким и полным:
Полной фигнёй скорее: понатыкали всякого разного, смешали в кучу ООП и C++. Всё очень наивно и примитивно, на уровне школьника.

Вот это просто

Цитата Сообщение от vantfiles Посмотреть сообщение
Греческий термин, чем означает способность принимать другую форму.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
09.08.2020, 16:20
Цитата Сообщение от korvin_ Посмотреть сообщение
на уровне школьника.
А вы серьезно считаете, что на вопрос "Объясните понятие ООП" следует отвечать на уровне доктора наук?

Если вам этот текст не нравится - поступите конструктивно, напишите свои ответы на заданные в нем вопросы.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
10.08.2020, 14:50
Цитата Сообщение от Mikhaylo Посмотреть сообщение
ООП - это объединение под общим именем (именем объекта) переменных, функций и других объектов.
F#
1
type MyObject = { Data: int; Function: int -> int }
И где тут ООП? Идею объединять данные и методы работы с ними в одном модуле используют в всех языках, начиная с Фортрана. Причём, данные и вспомогательные функции обычно скрывают (инкапсуляция) и получается Абстрактный Тип Данных.

Добавлено через 7 минут
И, кстати, данный приём используется не только для объектов, но и для значений.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
10.08.2020, 15:26
Цитата Сообщение от vantfiles Посмотреть сообщение
А вы серьезно считаете, что на вопрос "Объясните понятие ООП" следует отвечать на уровне доктора наук?
Тут дело не в уровне. Есть разница между ООП и "синтаксисом С++ для поддержки ООП". Особенно важно понимать, что этот "синтаксис С++" (например, ключевое слово "class") используется не только для ООП.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,816
10.08.2020, 15:44
Цитата Сообщение от Shamil1 Посмотреть сообщение
И где тут ООП?
Я лишь подчеркиваю, что основой ООП является объединение кода и данных. Ставим точку в предложении. Потом начинаются дополнительные фишки - наследование, абстракция, полиморфизм...

P.S. Хочу создать новую тему про идеальный IDE...

Добавлено через 2 минуты
Мы можем использовать объекты без наследования, абстракции и полиморфизма. Это доказательство, что ООП не зиждется на этих принципах.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
10.08.2020, 16:05
Shamil1, не нашел в этом тексте слово class, не понял, к чему этот пример. Если убрать слово THIS - и просто рассказать о существовании в экземпляре указателя на самого себя -- то под этот текст подойдет с десяток ооп-языков с весьма различающимися ооп-моделями.

Добавлено через 10 минут
Цитата Сообщение от Mikhaylo Посмотреть сообщение
объединение кода и данных
Этого мало, имхо, нужна еще возможность копировать и модифицировать это объединение - на этапе компиляции и/или в рантайме.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,816
10.08.2020, 16:12
Мало, но это мощная основа, которую не все понимают.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.08.2020, 01:02
Цитата Сообщение от vantfiles Посмотреть сообщение
не нашел в этом тексте слово class
Видимо, я тебя удивлю, но слово class не обязательно для ООП.

Цитата Сообщение от vantfiles Посмотреть сообщение
Если убрать слово THIS…
…а также слова public, protected, private, деструктор, static, overloading, namespace, геттеры(getters)/сеттеры(setters), клонирование…
Цитата Сообщение от vantfiles Посмотреть сообщение
…то под этот текст подойдет с десяток ооп-языков с весьма различающимися ооп-моделями.


P. S. This, при этом, можно и оставить.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
11.08.2020, 01:46

Не по теме:

korvin_, я восхищен вашими познаниями



жаль, ТС они не очень то и важны
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
11.08.2020, 10:58
Цитата Сообщение от korvin_ Посмотреть сообщение
Видимо, я тебя удивлю
Я реализовывал class-based модель для языка Forth и несколько вариантов prototype-based моделей для Lua. Удивить меня сложно.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.08.2020, 15:45
Цитата Сообщение от vantfiles Посмотреть сообщение
Я реализовывал class-based модель для языка Forth и несколько вариантов prototype-based моделей для Lua. Удивить меня сложно.
Тогда твой комментарий про отсутствие слова «class» непонятен.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
11.08.2020, 16:58
Цитата Сообщение от korvin_ Посмотреть сообщение
Тогда твой комментарий про отсутствие слова «class» непонятен.
Перечитайте еще раз:

Цитата Сообщение от Shamil1 Посмотреть сообщение
Есть разница между ООП и "синтаксисом С++ для поддержки ООП". Особенно важно понимать, что этот "синтаксис С++" (например, ключевое слово "class") используется не только для ООП.
Цитата Сообщение от vantfiles Посмотреть сообщение
Shamil1, не нашел в этом тексте слово class, не понял, к чему этот пример. Если убрать слово THIS - и просто рассказать о существовании в экземпляре указателя на самого себя -- то под этот текст подойдет с десяток ооп-языков с весьма различающимися ооп-моделями.
Что вам здесь кажется непонятным?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2020, 16:58

Объясните кое что по ООП
Не дает мне покоя очень важный момент, пример: System.IO.File.Open() System.IO - пространство имен File - класс Open() -...

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

Объясните некоторые принципы ООП в конкретной реализации
Доброго дня! У меня есть пользователи, которые делятся на зарегистрированных (User) и незарегистрированных (Person) и создаются...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru