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

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

13.02.2020, 23:25. Показов 21421. Ответов 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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
18.10.2020, 00:58
Что-то понеслось - чрезмерно абстрагировались: числа, объекты, функции, кони, люди - все смешалось, разница между всем этим исчезла куда-то...

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

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

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

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

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

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

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

Это мой опыт общения с программистами. Считается, что они мыслят строго. Мое мнение - да, они мыслят строго, но зачастую иррационально, особенно в тех случаях, когда их выхлоп не покрыт тестированием. Смешно, но это так.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
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
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
20.10.2020, 07:31
Цитата Сообщение от korvin_ Посмотреть сообщение
не имеющие ничего общего с реальностью
ууу, как страшно!
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
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
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru