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

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

13.02.2020, 23:25. Показов 21474. Ответов 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
11.08.2020, 17:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Я лишь подчеркиваю, что основой ООП является объединение кода и данных.
Выглядит, как определение "кошка - это животное с усами и хвостом". Вроде как похоже на кошку (и в условиях современного города им даже можно пользоваться), но по сути ничего не определяет, так как не позволяет строго отличить кошку от не кошки (не все кошки подходят под это определение и некоторые не кошки подходят под это определение).

Добавлено через 8 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
не нашел в этом тексте слово class, не понял, к чему этот пример
Слово "класс" в этом тексте есть. Большинство терминов в нём дано в русском переводе. Причём, многие термины не обязательны для ООП и/или используются не только в ООП. А некоторые объяснены неправильно.
Пример к тому, что глядя на фрагмент кода, мы не всегда можем сказать, какая парадигма используется.

Добавлено через 15 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
2. Что такое объект в ООП?
Объект называется экземпляром класса, и он имеет свое собственное состояние, поведение и идентичность.
Объект не обязательно является экземпляром класса. Объект может не иметь поведения. Как отличить состояние от значения?

И так далее...

В целом текст нормальный. Для новичков, переходящих с Си на Си++ в 1980-м году.

Цитата Сообщение от vantfiles Посмотреть сообщение
5. Каковы базовые принципы ООП?
Абстракция.
Инкапсуляция.
Наследование.
Полиморфизм.
В принципе верно. Но для полноты картины обязательно нужно сказать, какие из этих принципов характерны для ООП. Новички, начитавшись таких текстов начинают думать "раз инкапсуляция - значит, ООП... и т.п.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
11.08.2020, 20:54
Цитата Сообщение от Shamil1 Посмотреть сообщение
В целом текст нормальный. Для новичков, переходящих с Си на Си++ в 1980-м году.
ооп уже было... но до плюсов на тот момент еще было далеко...

я обязательно отвечу на ваши дельные комментарии, но позже, в моем городе время позднее....
1
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
11.08.2020, 23:14
Цитата Сообщение от Shamil1 Посмотреть сообщение
Выглядит, как определение "кошка - это животное с усами и хвостом". Вроде как похоже на кошку (и в условиях современного города им даже можно пользоваться), но по сути ничего не определяет, так как не позволяет строго отличить кошку от не кошки (не все кошки подходят под это определение и некоторые не кошки подходят под это определение).
Это ваша проблема, как вы будете описывать объект-кошку. У вас есть инструмент, используя его, может быть что-то и получится. Отличать кошку от некошки - это не цель и не базис ООП, так что непонятно, зачем все эти прения-трения. "По сути ничего не определяет" - это я тоже не понимаю.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.08.2020, 23:18
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Объект - это когда ты пишешь в программе object.variable и object.function().
Как тогда писать мультиметоды?
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
12.08.2020, 01:33
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Отличать кошку от некошки - это не цель и не базис ООП
Цель определения Х - отличать Х от не Х. Если определение не позволяет отличить Х от не Х, то это не определение.

Добавлено через 44 секунды
Цитата Сообщение от vantfiles Посмотреть сообщение
но до плюсов на тот момент еще было далеко...
Я хотел написать в 80=ых годах .
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 05:21
Цитата Сообщение от korvin_ Посмотреть сообщение
Как тогда писать мультиметоды?
Зачем? Это не входит в базис.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Цель определения Х - отличать Х от не Х. Если определение не позволяет отличить Х от не Х, то это не определение.
Компилятор и человек отлично справляются с различением двух разных объектов - у них разные имена! Почему вы решили, что программа должна обязательно делать это runtime?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 05:35
https://ru.wikipedia.org/wiki/Слепые_и_слон

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

Слепцы, числом их было пять,
В Бомбей явились изучать
Индийского слона.
Исследовав слоновий бок,
Один сказал, что слон высок
И прочен, как стена.
Другой по хоботу слона
Провел рукой своей
И заявил, что слон — одна
Из безопасных змей.
Ощупал третий два клыка,
И утверждает он:
— На два отточенных штыка
Похож индийский слон!
Слепец четвертый, почесав
Колено у слона,
Установил, что слон шершав,
Как старая сосна.
А пятый, подойдя к слону
Со стороны хвоста,
Определил, что слон в длину
Не больше чем глиста.
Возникли распри у слепцов
И длились целый год.
Потом слепцы в конце концов
Пустили руки в ход.
А так как пятый был силен, —
Он всем зажал уста.
И состоит отныне слон
Из одного хвоста!
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 05:42
В данном случае слоновьим хвостом является объединение полей и методов под одним именем, т.е.

C++
1
2
3
4
5
6
class objectname {
type1 field1;
type2 field2;
type3 method1();
type4 method2();
}
И обращения objectname.field1 и objectname.method1()

Я-то слона настоящего нащупал. Именно это является прорывом ООП и об этом пишется изначально во всех учебниках.)))
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 06:05
Цитата Сообщение от Mikhaylo Посмотреть сообщение
объединение полей и методов
Без возможности копирования и модификации это всего лишь объединение

Назовем поля и методы так:

objectname_field1
objectname_field2
objectname_method1
objectname_method2

Получаем обычную библиотеку ф-ций.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 07:03
Да, все верно. От структурного подхода до ООП один элементарный шаг, который потом позволяет реализовывать революционные идеи:
1. А зачем каждый раз писать object_, если и так понятно в контексте? Это будет основой для последующей идеи инкапсуляции.
2. А почему бы в один объект не запихнуть поля-методы другого объекта, не включая имя того объекта? Это будет наследование.

Полиморфизм - это не только ООП, поэтому как бы и непонятно.
Абстракция это подыдея наследования, без нее не работает.

Добавлено через 31 минуту
Наследование - это хитрое объединение кода и данных, можно сказать, разновидность.

Обычное объединение подразумевает, что у всех полей, методов и объектов появляется имя более высокого уровня.
object2.object1.variable
object2.object1.method()

При наследовании происходит тоже самое, но имя присоединяемого объекта в обращение не включается, т.е.:
object2.variable
object2.method()

Ну тут и понятно, почему во многих ЯП наследственное включение допускается только для одного класса-объекта, а обычное включение множественное.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 07:59
Mikhaylo, а что если так: ?

косвенный вызов + таблица полей/ф-ций

косвенное обращение
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 08:02
Тогда это другая парадигма?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 08:19
ну почему же, все тоже самое, но на более тонком плане:

object - базовый адрес
поля/методы - смещение относительно object

Добавлено через 3 минуты
object.field
object.metod

это всего лишь синтаксис....

Без явной или неявной передачи в metod адреса object это ничего не стоит
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 08:21
Приведите примеры.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 08:41
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
metod1:    
        ...
        ret
metod2:    
        base + f1 = base + f2
        ret
 
object1: 0000
  f1:   +0
  f2:   +2
  m1:   @metod1 -- +4
  m2:   @metod2 -- +6
 
copy( object1, to_object2 )
 
  call to_object2( @to_object2, metod2 ) -- здесь @to_object2 - это и есть base
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 09:45
Есть объединение полей и методов под одним именем? Есть. Значит это ООП. Нет - значит нет.

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

Только смотрите, синтаксис можно так извратить, что невозможно станет его понимать... Но это уже другой вопрос...
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.08.2020, 09:54
Цитата Сообщение от Mikhaylo Посмотреть сообщение
позволяет делать вызовы функций по указателям/ссылкам
именно
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
12.08.2020, 10:04
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Компилятор и человек отлично справляются с различением двух разных объектов - у них разные имена!
Х - это не объекты, а классы объектов. Не кошка Мурка, а кошка в моём примере. Определение кошки предназначено для определения, является ли выбранный объект кошкой.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
12.08.2020, 10:19
Кошка - это класс, принадлежность объекта какому-либо классу обычно вполне определенна at design-time.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
12.08.2020, 12:05
Я использую "класс" в математическом смысле. Любое множество можно разбить на классы эквивалентности. Определение Х должно разбивать множество на два класса - Х и остальные (не Х).

Добавлено через 9 минут
Цитата Сообщение от Mikhaylo Посмотреть сообщение
ООП - это объединение под общим именем (именем объекта) переменных, функций и других объектов. Рекурсивное определение.
В силу вышесказанного это не является определением ООП, так как не позволяет отличать ООП от не ООП.

Более того, если не используется полиморфизм подтипов, то любой class (ООП термин) можно разбить на два, один из которых содержит только методы (функции), а другой только данные. При этом в коде достаточно заменить myObject.SomeMethod() на new MyMethods().SomeMethod(myObject). То есть, структура кода (парадигма) не поменяется, поменяется только синтаксис.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2020, 12:05

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru