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

Понимание основ ООП

27.04.2022, 16:33. Показов 16476. Ответов 188
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Начал изучать ООП и сразу возникло непонимание на изучении классов.

У любого класса есть набор своих индивидуальных свойств, но ведь есть и свойства, которые будут общими для всех классов. Например, температура и плотность, если мы говорим о материальных вещах. Да и вообще любые физические и химические свойства для всех материальных вещей будут общими: электропроводность, молярный вес и т. д. Понятно, что они будут иметь различные значения, но фундаментально эти понятия будут едиными для любых классов, выражающих эти самые материальные вещи.

Соответственно, при создании объектов мне необходимо будет для каждого из них задавать свойство, допустим, «Температура» или языки ООП позволяют создать некое «глобальное, общее» свойство и при создании конкретного объекта я смогу присваивать ему это «глобальное» свойство, задавая лишь значение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2022, 16:33
Ответы с готовыми решениями:

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

Знание основ ООП/Джава
Здравствуйте. Хочу записаться на курсы по Java, но там требование: знание основ ООП/Java. Подскажите, что именно входить в знание основ...

освоение основ
я учусь на инженера программного обеспечения на втором курсе. Нам дают всего по чу-чуть, возникла нужда в самообразовании. Как я выяснил...

188
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
12.05.2022, 10:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tavashi Посмотреть сообщение
Могу ответить точно также, вам приводили определение А.
Вы не привели определения Алана Кея. Вы привели какую-то цитату с неизвестным контекстом. Вот список определений ООП, включая определение Алана Кея:
http://wiki.c2.com/?DefinitionsForOo

Цитата Сообщение от Tavashi Посмотреть сообщение
Это определение есть в ру вики - отсюда следует, что вы считаете определение в ру вики отражающим мнение большинства. Разве не так?
Не знаю, есть оно в вики или нет.

Цитата Сообщение от Tavashi Посмотреть сообщение
не пытайтесь увиливать
От чего я увиливаю?

Цитата Сообщение от Tavashi Посмотреть сообщение
Открываю, например, книгу Starting Out With Visual Basic 8th Edition by Tony Gaddis, Kip Irvine и нахожу в ней классификацию VB, выделенное даже рамочкой:
И как это противоречит тому, что я написал?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.05.2022, 11:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
Для ООП наличие классов не обязательно.
Вопрос терминологии всего лишь. Можно назвать это "образцом" - суть не поменяется.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Не важно, как вы создаёте объекты, важно - есть расширение (наследование) или нет.
Мы по-разному расставляем акценты - для меня важнее взять в рантайме образец (реально существующий или умозрительный, как в приведенных мной примерах) - и наштамповать с него копий с персональными свойствами. Это невозможно сделать без динамической памяти и косвенной адресации к полям данных, как я уже говорил. А есть у образца наследование или его нет - это дело совершенно десятое.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
12.05.2022, 11:35
Цитата Сообщение от vantfiles Посмотреть сообщение
Это невозможно сделать без динамической памяти и косвенной адресации к полям данных, как я уже говорил.
Получаем, что, по Вашему мнению, наличие косвенной адресации является необходимым условием. Но является ли достаточным? Например, я могу взять произвольную программу на ассемблере, которая использует только прямую адресацию вызовов, и везде прямую адресацию заменить на косвенную. Можно ли после этого сказать, что это ООП праграмма?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.05.2022, 12:01
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но является ли достаточным?
Я же написал - два условия.
1) Необходима возможность динамически выделять память.
2) Необходима возможность косвенно к ней обращаться.

Добавлено через 8 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
obj1        dw  0
obj2        dw  0
va      equ +0
vb      equ +4
 
fun_add:
        mov eax,[edx + va]
        mov ebx,[edx + vb]
        add eax,ebx
        ret
main:
        mov eax,8
        call    get_mem
        mov obj1,eax
 
        mov eax,8
        call    get_mem
        mov obj2,eax
 
        mov edx,obj1
        call    fun_add
 
        mov edx,obj2
        call    fun_add
Вот и все ооп, если перейти на ассемблер.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
12.05.2022, 12:31
Цитата Сообщение от vantfiles Посмотреть сообщение
1) Необходима возможность динамически выделять память.
2) Необходима возможность косвенно к ней обращаться.
Это необходимые или достаточные условия?

C#
1
2
3
4
5
6
7
void Main()
{
    var x = new { greet = (Func<string>)(() => "Hello!") };
    var output = x.greet();
    
    Console.WriteLine(output);
}
Добавлено через 8 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
Вот и все ооп
У меня есть произвольная программа на Fortran 66.

Если я правильно Вас понимаю, то Вы не можете сказать, это оо код или нет. Всё будет зависеть от того, как реализован компилятор. Например, если создатели компилятора в начале исполнения кода динамически выделяют память в куче и засовывают туда все сслыки на все сабрутины, то программа становится ООП. Правильно?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.05.2022, 13:16
Цитата Сообщение от Shamil1 Посмотреть сообщение
Это необходимые или достаточные условия?
Выберите ответ самостоятельно.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Правильно?
Как хотите.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
12.05.2022, 14:11
Цитата Сообщение от vantfiles Посмотреть сообщение
Выберите ответ самостоятельно.
Вы сформулировали некое определение для ООП, но мне не ясны детали. Если я выберу самостоятельно, то это уже не будет Вашим определением.

Цитата Сообщение от vantfiles Посмотреть сообщение
Как хотите.
Меня интересует, является ли это утверждение истинным. Согласно Вашему определению объектно-ориентированность связана не с кодом, а с реализацией транслятора, который этот код преобразует в машинные команды (условно, переводит на ассемблер).
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.05.2022, 18:34
Хорошо, я попробую.

ООП - методология программирования, в основе которой лежит объект.
Объект - динамическая структура данных + набор ф-ций, для которых эта структура является аргументом.
Это необходимо и достаточно.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
12.05.2022, 19:12
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы не привели определения Алана Кея.
Как раз его и привел. Это самое настоящее и изначальное определение ООП. Нужно его знать, чтобы разбираться в сути вопроса.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Не знаю, есть оно в вики или нет.
Знаете конечно же. Именно мне вы и предлагали смотреть на вики.
Цитата Сообщение от Shamil1 Посмотреть сообщение
От чего я увиливаю?
От того, что на ру вики VB указан как ООП язык:
На ру вики VB это ООП язык, не пытайтесь увиливать: Класс языка Процедурный, Объектно-ориентированный.
Цитата Сообщение от Shamil1 Посмотреть сообщение
И как это противоречит тому, что я написал?
Вы писали:
Поэтому язык VB не является объектно-ориентированным программированием.
Я привел вам в качестве примера книгу, где указано обратное:
Note
Visual Basic is an object-oriented programming (OOP) language.
Добавлено через 6 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Для ООП наличие классов не обязательно.
Странно, что вы так быстро меняете свое мнение и классы уже не являются необходимыми. Всего несколько страниц вы писали:
Определение из википедии:
Объе́ктно-ориенти́рованное программи́рование (сокр. ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования[1].

Обратите внимание, что если классы не образуют иерархию, то это уже не ООП.
P.S. Это как раз определение из вики, про которое вы пишете, что не знаете есть ли оно там или нет:
Не знаю, есть оно в вики или нет.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.05.2022, 05:08
Цитата Сообщение от Shamil1 Посмотреть сообщение
Поэтому ссылаться надо не на некую цитату, а на определение, которое он дал.
Почему это?

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme LateBinding of all things.
--- https://wiki.c2.com/?AlanKaysD... ctOriented

Добавлено через 2 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
В определении Алана Кея фигурируют требования к наследованию (иерархии) и полиморфизму подтипов.
The earliest known published reference which might reveal Kay's thinking on the matter (known to me, at any rate) is the paper EarlyHistoryOfSmalltalk (which you can download by going to that WikiPage). It contains the following definition (on page 78 if you follow the link...). As noted below, this is primarily a description of Smalltalk
1. EverythingIsAnObject.
2. Objects communicate by sending and receiving messages (in terms of objects).
3. Objects have their own memory (in terms of objects).
4. Every object is an instance of a class (which must be an object).
5. The class holds the shared behavior for its instances (in the form of objects in a program list)
6. To eval a program list, control is passed to the first object and the remainder is treated as its message.
--- никакого наследования и полиморфизма подтипов.

Добавлено через 6 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Без иерархии нет ООП. Именно в иерархии заключается суть парадигмы.
Нет, суть парадигмы --- в динамической диспетчеризации, не более того. В главе SICP про моделирование электрических схем это наглядно показано. Наследование --- лишь инструмент для повторного использования кода и разрешения статической типизации.

Добавлено через 10 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Именно так нужно отвечать на собеседовании, если вы хотите, чтобы вас взяли на работу...
..."быдлокодером". Ни на одном нормальном собеседовании не будут спрашивать такое и ожидать такого ответа. В лучшем случае спросят про SOLID, но и там у сообеседующих тараканов хватает.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 11:51
Цитата Сообщение от korvin_ Посмотреть сообщение
Почему это?
Потому что это очевидно из контекста.

И по Вашей ссылке об этом тоже написано:
Objection: on page 78 it is made clear that the above are the design principles behind Smalltalk, but nowhere it is implied that they should also serve as definition of ObjectOriented.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 12:03
Цитата Сообщение от Tavashi Посмотреть сообщение
Это самое настоящее и изначальное определение ООП. Нужно его знать, чтобы разбираться в сути вопроса.
Неправда. Чтобы убедиться в этом, достаточно прочитать первоисточник.
http://stephane.ducasse.free.f... ryHOPL.pdf

Все остальные Ваши реплики основаны на искажении или неправильном понимании моих слов.
Например,
Цитата Сообщение от Tavashi Посмотреть сообщение
Я привел вам в качестве примера книгу, где указано обратное:
В этой книге не написано, что язык VB является программированием.

Поэтому отвечать на них я не вижу смысла.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 12:51
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет, суть парадигмы --- в динамической диспетчеризации, не более того. В главе SICP про моделирование электрических схем это наглядно показано.
В каком конкретно месте в SICP написано, что суть объектно-ориентированного программирования в динамической диспетчеризации?

В моей версии SICP я такого не нашёл.
Единственное место, где упоминаются ОО языки - параграф про иерархию. При этом говорится, что большая часть сложности ОО языков связана с тем, что они сосредоточены на обработке обобщённых операций над взаимосвязанными типами данных.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 12:57
Цитата Сообщение от vantfiles Посмотреть сообщение
ООП - методология программирования, в основе которой лежит объект.
Объект - динамическая структура данных + набор ф-ций, для которых эта структура является аргументом.
Это необходимо и достаточно.
Спасибо.

Согласно Вашему определению gmp написана с использованием ООП.
Там динамическая структура данных для хранения длинных чисел и набор функций, для которых эта структура является аргументом.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.05.2022, 13:10
Цитата Сообщение от Shamil1 Посмотреть сообщение
Согласно Вашему определению gmp написана
Цитата Сообщение от vantfiles Посмотреть сообщение
Объект - динамическая структура данных
в gmp есть структуры данных?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 13:44
Цитата Сообщение от vantfiles Посмотреть сообщение
в gmp есть структуры данных?
Да. Длинное число - это динамическая структура данных. Клиентское приложение хранит ссылку на неё. Клиент не работает с этой ссылкой напрямую, а только передаёт её в функции.

C
1
2
3
4
5
6
7
8
9
10
11
{
  mpz_t integ;
  mpz_init (integ);
  …
  mpz_add (integ, …);
  …
  mpz_sub (integ, …);
 
  /* Unless the program is about to exit, do ... */
  mpz_clear (integ);
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
13.05.2022, 16:57
Цитата Сообщение от Shamil1 Посмотреть сообщение
В каком конкретно месте в SICP написано, что суть объектно-ориентированного программирования в динамической диспетчеризации?
Я не сказал написано. Я сказал показано. А показано ровно оно — передача сообщений и разная реакция объектов на одинаковые сообщения.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
13.05.2022, 20:27
Цитата Сообщение от Shamil1 Посмотреть сообщение
Неправда. Чтобы убедиться в этом, достаточно прочитать первоисточник.
Это и есть самый что ни на есть первоисточник:
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. (c) Dr. Alan Kay on the Meaning of “Object-Oriented Programming”
Цитата Сообщение от Shamil1 Посмотреть сообщение
Все остальные Ваши реплики основаны на искажении или неправильном понимании моих слов.
Интересно, а в чем искажение, если вы сами предлагали мне смотреть определение ООП на ру вики? А теперь делаете вид, что этого не было и вообще не знаете, что именно на ру вики написано. Ага.
Цитата Сообщение от Shamil1 Посмотреть сообщение
В этой книге не написано, что язык VB является программированием.
Именно это в книге и написано:
Note
Visual Basic is an object-oriented programming (OOP) language.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Поэтому отвечать на них я не вижу смысла.
Я бы рекомендовал вам все-таки разобраться в сути ООП, чтобы вам было что отвечать на собеседованиях.
Особенно разобраться с тем, что ООП может быть без классов или без наследования.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
13.05.2022, 23:57
Цитата Сообщение от korvin_ Посмотреть сообщение
Я не сказал написано. Я сказал показано. А показано ровно оно — передача сообщений и разная реакция объектов на одинаковые сообщения.
Там приведена некая техника, но не написано, что это ООП. Правильно?

Цитата Сообщение от korvin_ Посмотреть сообщение
передача сообщений и разная реакция объектов на одинаковые сообщения
Вот тут тоже разная реакция разных объектов на одинаковые сообщения:
C#
1
2
3
4
5
6
7
8
void Main()
{
    var x = new { greet = (Func<string>)(() => "Hello!") };
    var y = new { greet = (Func<string>)(() => "Merhaba!") };
 
    Console.WriteLine(x.greet());
    Console.WriteLine(y.greet());
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
14.05.2022, 01:04
Цитата Сообщение от Shamil1 Посмотреть сообщение
Там приведена некая техника, но не написано, что это ООП. Правильно?
Не написано, но прямо говорится в видеолекции: https://youtu.be/yedzRWhi-9E?t=110

Цитата Сообщение от Shamil1 Посмотреть сообщение
Вот тут тоже разная реакция разных объектов на одинаковые сообщения:
Ну да. Что тебя смущает? Такое себе ручное построение объекта без специального синтаксиса, с помощью замыканий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2022, 01:04

Тесты на знание основ C++
Здравствуйте. Помогите найти тестовые задания по основам программирования на языке с++. Нужно много тестовых заданий (порядка 200-300), по...

Нужны основы основ
Доступ к полям таблиц баз данных FireBird в в среде разработки Builder C++

Разбор основ qt widtgets
Здравствуйте! В первый раз создал qt gui приложение и сразу появилось множество вопросов. Вот код: header.h ...... namespace Ui...

C для изучения основ программирования
Как вы думаете, подходит ли c как язык для изучения основ программирования и погружения в IT сферу. Имею опыт программирования на Python,...

Что изучать после основ?
Всем доброго времени суток, пробуксировал учебник по плюсам, теперь знаю основы от выделения памяти под переменную, до умных указателей,...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru