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

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

13.02.2020, 23:25. Показов 21646. Ответов 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
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,820
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,900
12.08.2020, 01:33
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Отличать кошку от некошки - это не цель и не базис ООП
Цель определения Х - отличать Х от не Х. Если определение не позволяет отличить Х от не Х, то это не определение.

Добавлено через 44 секунды
Цитата Сообщение от vantfiles Посмотреть сообщение
но до плюсов на тот момент еще было далеко...
Я хотел написать в 80=ых годах .
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
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,820
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,820
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,820
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,820
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,820
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,900
12.08.2020, 10:04
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Компилятор и человек отлично справляются с различением двух разных объектов - у них разные имена!
Х - это не объекты, а классы объектов. Не кошка Мурка, а кошка в моём примере. Определение кошки предназначено для определения, является ли выбранный объект кошкой.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
12.08.2020, 10:19
Кошка - это класс, принадлежность объекта какому-либо классу обычно вполне определенна at design-time.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
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 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
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. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru