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

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

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

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

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

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

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

242
 Аватар для neya
4 / 3 / 1
Регистрация: 30.08.2019
Сообщений: 37
14.10.2020, 11:27
Студворк — интернет-сервис помощи студентам
Мне нужно посчитать ускорение по второму закону Ньютона. ускорение = Сила / масса .
Создаю свойства "масса" и "сила", они будут проверять корректность данных, ну и хранить их
к ним метод "делилка", который будет разбираться с целочисленностью-нецелочисленностью деления и погрешностью.

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

Поэтому я упакую всё в объект, и буду работать внутри него. А что дам пользователю наружу? Конструктор, которому пользователь скормит силу и массу.

Класс назову "Считалка_ускорения".
Работать с ним пользователь будет мак.

моё_укорение = считалка_ускорения (масса: 10, сила: 5)

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

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

У него задача - посчитать ускорение - а не вникать в дебри второго закона Ньютона. Вот в этом состоит абстрагирование.
Чем больше пользователь разгружен от деталей решения задачи - тем выше уровень абстрагирования.

Добавлено через 9 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Абстрагирование не является чем-то специфичным для ООП.
Абстрагирование вообще не является чем-то специфичным.
Но есть разная приспособленность парадигм для абстрагирования. Есть более удобные инструменты достижения высокоуровневых абстракций - и менее, соответственно.
Чем ближе текст программы к человеческому языку - тем выше работа по уровню абстрагирования. Тем приспособленнее парадигма для абстрагирования.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
14.10.2020, 11:36
Цитата Сообщение от neya Посмотреть сообщение
Мне нужно посчитать ускорение по второму закону Ньютона. ускорение = Сила / масса .
Создаю свойства "масса" и "сила", они будут проверять корректность данных, ну и хранить их
к ним метод "делилка", который будет разбираться с целочисленностью-нецелочисленностью деления и погрешностью.
Могу упаковать это всё в модуль, но там не будет проксирования; это то же, что использовать поля и методы класса; в них по дороге к вычислениям кто-нибудь может сдуру влезть и что-то переопределить, и я получу на выходе не весть что.
Поэтому я упакую всё в объект, и буду работать внутри него. А что дам пользователю наружу? Конструктор, которому пользователь скормит силу и массу.
Класс назову "Считалка_ускорения".
Работать с ним пользователь будет мак.
моё_укорение = считалка_ускорения (масса: 10, сила: 5)
Вот это и есть абстрагирование: реализация вычислений спрятана под капот, а пользователь, посмотрев в инструкцию и прочитав, что здесь ему нужно вычислить ускорение - прямо по инструкции - вызывает считалку ускорения и скармилвает ей параметры.
У пользователя в инструкции стоит директива: посчитай ускорение - и он, на заморачивая себе голову деталями, прямо выполняет инструкцию - то есть, работает на уровне языка самой задачи - а не уровне языка решения задачи.
У него задача - посчитать ускорение - а не вникать в дебри второго закона Ньютона. Вот в этом состоит абстрагирование.
Чем больше пользователь разгружен от деталей решения задачи - тем выше уровень абстрагирования.
Haskell
1
acceleration force mass = force / mass
вот и вся абстракция. Без кучи ненужного ООП-мусора.

Цитата Сообщение от neya Посмотреть сообщение
Чем ближе текст программы к человеческому языку - тем выше работа по уровню абстрагирования.
И ООП тут не при чём.
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.10.2020, 11:42
Цитата Сообщение от neya Посмотреть сообщение
Чем ближе текст программы к человеческому языку - тем выше работа по уровню абстрагирования.
В ФП текст программы обычно ближе к человеческому языку, чем в ООП.
2
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
14.10.2020, 11:57
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
open System
 
(* meter *)
[<Measure>] type m
 
(* second *)
[<Measure>] type s
 
(* kilogram *)
[<Measure>] type kg
 
(* Newtons *)
[<Measure>] type N = kg m / s^2
 
let acceleration (force : float<N>) (mass : float<kg>) = force / mass
 
let _ =
  printfn "%A m / s^2" (acceleration 4.2<N> 2.1<kg>)
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.10.2020, 12:08
Если Вас спросят "Что такое двигатель внутреннего сгорания", то ответ типа "это машина, в которой внутренняя энергия топлива превращается в механическую энергию" будет неудовлетворительным. Под это определение подходят и паровой двигатель, и реактивный, и даже огнестрельное оружие.

В любой книге по ООП вы найдёте основные принципы ООП: инкапсуляция, наследование, полиморфизм. В некоторых ещё и абстрация, но это совсем уж тавтология, ибо этот принцип лежит в основе (почти) всего. Всё верно, но нужно понимать две вещи:
1. Принципиальное отличие ООП от других парадигм - в использовании полиморфизма подтипов (а для этого нужно наследование или создание по образцу).
2. Использование ключего слова "class" не означает использование ООП-концепции (не является достаточным условием).
1
 Аватар для neya
4 / 3 / 1
Регистрация: 30.08.2019
Сообщений: 37
14.10.2020, 15:07
Масса должна быть неотрицательной, пользователю при ошибке нужно дать возможность её подкорректировать
Переменная mass - глобальная у соседа. У него вообще все переменные всегда глобальные

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

Добавлено через 1 час 4 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
вот и вся абстракция. Без кучи ненужного ООП-мусора
На практике большей частью я согласен, но у меня почти нет не помещающихся в голову задач.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.10.2020, 15:19
Цитата Сообщение от neya Посмотреть сообщение
Тогда эти типы можно создать самостоятельно, это будут классы - и думать в них.
Это не обязательно должны быть классы.
В C# и Java это будут классы, но только потому, что в них всё делается через... классы.

И думать об этом типе мы будем по-разному - в зависимости от того, чем он фактически является - Абстрактным Типом Данных, Миксином и т.д.

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

Цитата Сообщение от neya Посмотреть сообщение
Тогда текст программы будет близок языку и категориям, которыми человек думает о задаче.
Человек редко думает о задаче в циклах "int sum = 0; for(int i = 0; i < list.length; i++) sum += list[i];". Человек думает "мне нужно сложить все элементы списка" или - математическим языком - "мне нужна свёртка по +". Поэтому ФП обычно ближе (чем ООП) к тому, как думает человек.
1
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
14.10.2020, 18:00
Цитата Сообщение от korvin_ Посмотреть сообщение
А если я даю общее имя переменным и функциям, объединённым в виде модуля, а не объекта, это какой пункт?
А к модулям вы обращение можете делать? Нет? Тогда это не абстракция, хотя очень похоже... Просто пространство имён. У вас была сотня имён, так и осталась, нету упрощения, то есть абстрагирования, перехода на более высокий уровень.
0
 Аватар для neya
4 / 3 / 1
Регистрация: 30.08.2019
Сообщений: 37
14.10.2020, 18:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
Это не обязательно должны быть классы.
Вот здесь мне нравится, как человек объектном программировании говорит, с третьей минуты. Это для больших и сверхбольших систем, и если задача до двух тысяч строк кода, то можно обходиться и без
https://www.youtube.com/watch?... =UN%D0%98X
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
14.10.2020, 21:00
Цитата Сообщение от Mikhaylo Посмотреть сообщение
А к модулям вы обращение можете делать?
Что значит «обращение»? Допустим, да, могу.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
У вас была сотня имён, так и осталась, нету упрощения
О чём ты вообще?

Добавлено через 1 час 40 минут
Цитата Сообщение от neya Посмотреть сообщение
Вот здесь мне нравится, как человек объектном программировании говорит, с третьей минуты. Это для больших и сверхбольших систем, и если задача до двух тысяч строк кода, то можно обходиться и без
https://www.youtube.com/watch?... =UN%D0%98X
Чушь он говорит.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
15.10.2020, 06:49
Цитата Сообщение от korvin_ Посмотреть сообщение
О чём ты вообще?
А вы вникаете в суть сообщений? Абстрагирование, обобщение, общее имя, обращение к этому общему имени, переход от частного к общему. Есть оно в случае модулей?

Разве нужна моя помощь в дальнейшем осмыслении?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 07:32
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Абстрагирование, обобщение, общее имя, обращение к этому общему имени, переход от частного к общему. Есть оно в случае модулей?
Конечно.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Разве нужна моя помощь в дальнейшем осмыслении?
Нужно, чтобы ты ясно излагал мысли, а не пространными фразами выражался.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
15.10.2020, 12:09
Цитата Сообщение от Mikhaylo Посмотреть сообщение
А к модулям вы обращение можете делать?
Вы не отличите статический класс от модуля.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
15.10.2020, 12:16
Цитата Сообщение от neya Посмотреть сообщение
Вот здесь мне нравится, как человек объектном программировании говорит, с третьей минуты.
Ничего нового.
Абстрагирование. Любое программирование есть суть абстрагирование.
Инкапсуляция. Есть во всех (практических) языках, независимо от парадигмы.
Наследование. Способ повторного использования кода.
Полиморфизм. То, что он говрит про полиморфизм, лучше не слушать. Для него полиморфизм - это утиная типизация. ("Динамически типизируемые языки единообразно представляют разновидности полиморфизма, что формирует самобытную идеологию в них и влияет на применяемые методологии декомпозиции задач." (с) вики)
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
15.10.2020, 12:56
У меня есть функция SayHello:
C#
1
2
3
4
public static class StringHelper
{
    public static string SayHello(this string str) => $"Hello, {str}";
}
Я могу писать "John".SayHello() или SayHello("John"). То есть, до тех пор, пока у нас нет наследования с переопределением (override) метода, возможность писать "John".SayHello() вместо SayHello("John") - всего лишь синтаксический сахар, не влияющий на суть проектирования. Если же есть переопределение, то включается специальный механизм выбора подходящего метода. В разных ЯП этот механизм может быть реализован по-разному.

Если некий код можно выполнить для некого класса, то его можно выполнить и для любого класса наследника. То есть, класс наследник умеет всё то, что умеет базовый класс. Эта концепция называется "полиморфизм подтипов". Она влияет на суть проектирования. Если мы хотим, чтобы некий код выполнялся для разных типов, мы должны связать их наследованием. В этом и заключается ООП.
1
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
15.10.2020, 21:09
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы не отличите статический класс от модуля.
Языки разные бывают. А вложение модулей друг в друга? А вложение переменных в модуль?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 21:25
Цитата Сообщение от Mikhaylo Посмотреть сообщение
А вложение модулей друг в друга?
Конечно.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
А вложение переменных в модуль?
Само собой.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
15.10.2020, 21:31
Ну если модуль ничем неотличим от объектов, то он является объектом. Еще вопросы есть?))
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 21:48
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Ну если модуль ничем неотличим от объектов, то он является объектом.
Отличим, просто ты так и не спросил чем.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
15.10.2020, 22:31
Так определитесь уже, отличим или нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2020, 22:31

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Теория всего 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