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

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

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

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

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

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

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

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

Добавлено через 7 минут
И, кстати, данный приём используется не только для объектов, но и для значений.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
10.08.2020, 15:26
Цитата Сообщение от vantfiles Посмотреть сообщение
А вы серьезно считаете, что на вопрос "Объясните понятие ООП" следует отвечать на уровне доктора наук?
Тут дело не в уровне. Есть разница между ООП и "синтаксисом С++ для поддержки ООП". Особенно важно понимать, что этот "синтаксис С++" (например, ключевое слово "class") используется не только для ООП.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
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,820
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
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru