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

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

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

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

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

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

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

242
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 09:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Будь добр, вырази свою мысль лаконично без ссылок на англоязычные тома книг.
Я это сделал в первом же своём ответе в теме. С примером. Ты и его не читал?

Предлагаю тебе два упражнения:

1) Опиши квантовую механику лаконично, без ссылок на тома книг.

2) Подумай, чем
Java
1
2
3
System.out.printDouble(product.price());
System.out.printString(" x ");
System.out.printInt(product.quantity());
отличается от
Java
1
System.out.print(product);
а потом, чем
Java
1
System.out.print(product);
отличается от
Java
1
product.printTo(System.out);
Свои измышление изложи здесь.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
17.10.2020, 09:48
Цитата Сообщение от korvin_ Посмотреть сообщение
Свои измышление изложи здесь.
А мне нужна работа твоей головы, а не моей.

Я не буду ничего излагать, я уже излагал, а ты нет. Так что давай, хорош делать отсылки и требования что-то сделать, потрудись и заполни пост релевантным текстом.

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

Скажи: "Нет! Это бред! Я не согласен" и проведи работу по доказательству своей позиции. Можешь приводить свой код для примеров.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 10:02
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Я не буду ничего излагать, я уже излагал, а ты нет.
...
Цитата Сообщение от korvin_ Посмотреть сообщение
Я это сделал в первом же своём ответе в теме. С примером. Ты и его не читал?
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
17.10.2020, 10:18
Вот вижу:
Цитата Сообщение от korvin_ Посмотреть сообщение
Это программирование, при котором базовой единицей программы является объект, которому можно отправить сообщение, и вся программа состоит из таких объектов, обменивающихся сообщениями друг с другом.
1. Ты реально считаешь, что термин "сообщение" - удачное слово? Может вместо "отправить сообщение" употребить слово "воздействовать" или "отправить информацию"? Ну да и ладно, считай, мы друг друга поняли, но не поймет кто-то, кому это объясняют с нуля.

2. Но где действия (код, функции) внутри объектов в твоем определении? Это же ключевой момент!
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 10:34
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Ты реально считаешь, что термин "сообщение" - удачное слово?
Да, это общепринятый термин. Но ты же не хочешь читать литературу.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Может вместо "отправить сообщение" употребить слово "воздействовать" или "отправить информацию"?
Нет.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Но где действия (код, функции) внутри объектов в твоем определении? Это же ключевой момент!
Очевидно, что сообщения рассылаются не просто так, а объекты умеют их как-то обрабатывать, так что нет, это не ключевой момент.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
17.10.2020, 10:59
Ладно, тут каждый со своей колокольни судит. Но если новичку что-то рассказывать, то следует узнать его базис и тезаурус. Что он знает? Знает функции, переменные, только что изучил структуры (записи)...

Функция, кстати, принимает сообщение и выдает ответ. Это объект?

Ваше определение не включает в себя важные элементы и особенности, необходимые для понимания и отсутствует необходимая строгость.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 11:08
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Функция, кстати, принимает сообщение и выдает ответ. Это объект?
объекты не выдают ответ, только принимают сообщения. С помощью функций можно реализовать объекты и ООП, упрощённый пример есть в SICP.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Ваше определение не включает в себя важные элементы и особенности
Это какие, например?

Цитата Сообщение от Mikhaylo Посмотреть сообщение
отсутствует необходимая строгость
Присутствует. У ООП вообще нет строгого определения.
0
 Аватар для neya
4 / 3 / 1
Регистрация: 30.08.2019
Сообщений: 37
17.10.2020, 18:24
Объект в смысле проектирования это мысле-вещь, единица мышления о задаче.
Объект в языке это сущность с набором методов. Любую другую сущность, реализующую такой же набор методов,
Можно считать объектом такого же класса.
Натуральным числом будет всё то, что имеет те же методы, что у натурального числа. Если реализовать их у строки, то строка станет натуральным числом.

Добавлено через 2 часа 42 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вопросы:
1. Что такое объект? (Является ли натуральное число объектом?)
2. Что такое свойства? (Геттеры/сеттеры - это свойства или методы?)
3. Что такое методы? (Поле типа функция является свойтсвом или методом? Является ли методом функция, которая не меняет состояние объекта?)
Объект это то, о чём удобно думать в контексте задачи.
Натуральным числом будет то, что реализует методы натурального числа. Беззнаковое целое может включать и ноль, который не является натуральным числом. Поэтому ноль может стать натуральным, то есть, использоваться как натуральное.

Геттеры/сеттеры. Чем их считать, зависит от контекста разговора о них. Если важны значения с которыми они работают, можно считать свойствами; если речь о том, как они работают, можно считать методами.

Поле типа функция является свойтсвом или методом? - Если важно возвращаемое значение, можно считать свойстаом, если стороннее действие - методом.

Есть и такое деление: Что нужно ЗНАТЬ для решения задачи - соответствует свойствам, а что нужно ДЕЛАТЬ для решения - соответствует методам.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
18.10.2020, 00:58
Что-то понеслось - чрезмерно абстрагировались: числа, объекты, функции, кони, люди - все смешалось, разница между всем этим исчезла куда-то...

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

Возьмём свойство объекта. Свойство - это переменная + функция-геттер + функция-сеттер. Вы можете обращаться к свойству по общему имени. Черт побери, это частный случай объекта, у которого только одна переменная и одна/две функции. То есть свойство - это объект, но никак не функция, не структура и не переменная.

Статический класс, который, мы ещё не разобрались, по-крайней мере очень похож на модуль. Хоть и называется классом, фактически в нем реально выделяется память для переменных и функций, и им даётся общее имя. То есть неявно создаётся объект в единичном экземпляре.

А что такое класс? Обычный нестатический класс (не путать со статическим классом). Это тип объекта. Есть типы данных у переменных, а у объектов - классы.

Что такое прототипирование объектов и чем это отличается от создания объектов с помощью классов? Если в объект добавить функцию копирования и функцию преобразования, то вы получаете возможность прототипирования объектов. Функция копирования системная, а функция преобразования пользовательская. Я себе так представляю.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.10.2020, 23:17
neya,
1. Вы путаете объекты и значения.
Объект имеет состояние и индивидуальность. Число не имеет ни того, ни другого. Число - это значение.

2. Вы не учитываете, что ООП - это всего лишь один из способов программировать с помощью объектов.
То есть, из того, что Вы используете объекты, не следует, что Вы используете ООП. Для использования объектов ни то что классы, даже переменные не обязательны. Например, замыкание является объектом.
1
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
18.10.2020, 23:31
Замыкание - это функция)

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

Это мой опыт общения с программистами. Считается, что они мыслят строго. Мое мнение - да, они мыслят строго, но зачастую иррационально, особенно в тех случаях, когда их выхлоп не покрыт тестированием. Смешно, но это так.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
19.10.2020, 00:08
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Замыкание - это функция)
Нет.

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

з.ы. Учебники по программированию, так же как, например, учебники по истории, могут сильно отличаться друг от друга. Рекомендуется читать учебники известных, уважаемых авторов.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
19.10.2020, 12:29
Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, замыкание является объектом.
Именно так.

Вот пример: ООП через замыкания
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
19.10.2020, 20:39
Все же просто: когда мы говорим "объект", мы подразумеваем, что данные и код необязательно могут быть связаны друг с другом.

Если мы говорим о функции, то есть она неразрывно связана с переменными, и можно сказать, что функция - это объект, так как есть код и данные. Данные доступны под общем именем: function.input и function.output, правда синтаксисы языка, как правило, такую возможность не предоставляют, хотя я знаю такие языки.

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

Ребята, короче, тут все так сложно и одновременно просто...)))
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.10.2020, 21:18
Проще некуда

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(define (point-object label x y)
  (define (fmt)
    (format "~a(~a, ~a)" label x y))
  (match-lambda*
    (`(label) label)
    
    (`(x) x)
    
    (`(y) y)
    
    (`(move-to ,new-x ,new-y)
     (set! x new-x)
     (set! y new-y))
    
    (`(format) (fmt))
    
    (`(println) (printf "~a\n" (fmt)))))
 
(define (main)
  (define a (point-object 'A 1 2))
  (define b (point-object 'B -3 -4))
  (a 'println)
  (b 'println)
  (a 'move-to 5.6 7.8)
  (a 'println)
  (printf "Point ~a is on x: ~a, y: ~a\n"
          (b 'label) (b 'x) (b 'y)))
Code
1
2
3
4
A(1, 2)
B(-3, -4)
A(5.6, 7.8)
Point B is on x: -3, y: -4
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
19.10.2020, 21:55
Надо быть осторожным, говоря "ООП" или "не ООП". У нас есть простое и понятное определение: объект - это код и данные под общим именем. Если общего имени нет, то это не ООП. Приплыли!

Именно это обстоятельство мешает функции стать объектом. Нужна поддержка языка для ООП и это прописано в определении объекта.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.10.2020, 21:57
Или чуть посложней, с наследованием и полиморфизмом

Кликните здесь для просмотра всего текста
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(define super-dispatch (list "super-dispatch"))
 
(define (top . message)
  (error "Unknown message: ~s" message))
 
(define-syntax object
  (syntax-rules (inherit method)
    ((_ (self-var)
        (method (name args ...)
          body
          ...)
        ...)
     (object (self-var)
       (inherit top top)
       (method (name args ...)
          body
          ...)
        ...))
    ((_ (self-var)
        (inherit super-var super-init)
        (method (name args ...)
          body
          ...)
        ...)
     (let ((super-var super-init))
       (letrec ((dispatch
                 (lambda (self-var message)
                   (define (self-dispatch message)
                     (match message
                       ((list 'name args ...)
                        body
                        ...)
                       ...
                       (else
                        (super-var super-dispatch self-var message))))
                   (match message
                     ((list special actual-object actual-message)
                      (if (eq? special super-dispatch)
                          (dispatch actual-object actual-message)
                          (self-dispatch message)))
                     (else (self-dispatch message))))))
         (define (self . message)
           (dispatch self message))
         self)))))


Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(define (2d-point label x y)
  (object (self)
    
    (method (label) label)
    (method (x) x)
    (method (y) y)
    
    (method (move-to new-x new-y)
     (set! x new-x)
     (set! y new-y))
    
    (method (format)
      (format "~a(~a, ~a)" label x y))
    
    (method (println)
      (printf "~a\n" (self 'format)))))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(define (3d-point label x y z)
  (object (self)
    (inherit super (2d-point label x y))
 
    (method (z) z)
 
    (method (move-to new-x new-y new-z)
      (super 'move-to new-x new-y)
      (set! z new-z))
 
    (method (format)
      (format "~a(~a, ~a, ~a)" label (self 'x) (self 'y) z))))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(define (main)
  (define a (2d-point 'A 1 2))
  (define b (2d-point 'B -3 -4))
  
  (define c (3d-point 'C 42 -9 12))
  
  (a 'println)
  (b 'println)
  (a 'move-to 5.6 7.8)
  (a 'println)
  (printf "Point ~a is on x: ~a, y: ~a\n"
          (b 'label) (b 'x) (b 'y))
 
  (c 'println)
  (c 'move-to 1 2 3)
  (c 'println))
Code
1
2
3
4
5
6
A(1, 2)
B(-3, -4)
A(5.6, 7.8)
Point B is on x: -3, y: -4
C(42, -9, 12)
C(1, 2, 3)
Добавлено через 1 минуту
Цитата Сообщение от Mikhaylo Посмотреть сообщение
У нас есть простое и понятное определение: объект - это код и данные под общим именем
Нет такого определения, это фантазии в твоей голове, не имеющие ничего общего с реальностью.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
20.10.2020, 07:31
Цитата Сообщение от korvin_ Посмотреть сообщение
не имеющие ничего общего с реальностью
ууу, как страшно!
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.10.2020, 09:48
Цитата Сообщение от Mikhaylo Посмотреть сообщение
У нас есть простое и понятное определение: объект - это код и данные под общим именем.
Данное определение объекта является результатом Ваших собственных теоретических разработок или Вы прочитали его в учебнике?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.10.2020, 12:25
Цитата Сообщение от Shamil1 Посмотреть сообщение
Данное определение объекта
несложно перефразировать в более абстрактное:

"ООП — методология программирования, основанная на представлении программы в виде совокупности объектов."
"...объект - способ представления функциональности и данных, связанных и упакованных вместе."

Мне лично приведенные цитаты кажутся недостаточными - под это определение подходит модульная парадигма.
Необходимо добавить следующее - объект может быть создан во время исполнения программы. То есть - обязательно наличие механизма динамической памяти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2020, 12:25

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru