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

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

27.04.2022, 16:33. Показов 16485. Ответов 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
04.05.2022, 00:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tavashi Посмотреть сообщение
Для чего?
Пример ОО кода без наследования.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 00:16
Цитата Сообщение от Shamil1 Посмотреть сообщение
Пример ОО кода без наследования.
Так я же написал - композиция.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
04.05.2022, 00:42
Цитата Сообщение от Tavashi Посмотреть сообщение
Так я же написал - композиция.
Использование композиции не делает код объектно-ориентированным. Поэтому мне интересно, каким образом композиция заменит наследование в ОО коде.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 00:52
Цитата Сообщение от Shamil1 Посмотреть сообщение
Использование композиции не делает код объектно-ориентированным.
Вы хорошо понимаете что такое ООП?
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
04.05.2022, 06:09
Цитата Сообщение от power_factor Посмотреть сообщение
Допустим, мы хотим рассчитать зависимость расхода топлива автомобиля от сопротивления ветра. У нас есть:
- классы "Колёса", "Кузов", "Двигатель". Создаём объекты этого класса и методом агрегации/композиции создаём новый объект "Автомобиль". Причём мы можем менять в нём составные объекты (например, объект класса "Кузов" менять с "Седан" на "Пикап"), но сам объект "Автомобиль" будет продолжать существовать;
Пожалуйста, внимательнее: что есть класс, а что есть объект. Вы привели пример с автомобилем и элементы наследования. Поэтому прошу вас разобрать:
1. Автомобиль - ему нужен класс или он сразу объект?
2. Где тут требуется наследование?
3. Где композиция, а где может быть агрегация (как подвид композиции)?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
04.05.2022, 10:32
Цитата Сообщение от Shamil1 Посмотреть сообщение
Приведите пример кода с использованием полиморфизма подтипов.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Пример ОО кода без наследования.
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function add_1() end
function add_2() end
function sub_1() end
function sub_2() end
 
obj_1 = class()
obj_1.a = 0
obj_1.b = 0
obj_1:add = add_1
obj_1:sub = sub_1
 
obj_2 = class()
obj_2.a = "one"
obj_2.b = "two"
obj_2:add = add_2
obj_2:sub = sub_2
 
obj_list = { obj_1, obj_2 }
 
for i = 1, #obj_list do
    obj_list:add()
end
Добавлено через 4 минуты
код на мой взгляд прозрачен, но если возникнут вопросы, спрашивайте.
со времен турбо-паскаля мне не нравилась класс-бейзед модель. Прототипы ответили на все мои вопросы.

Добавлено через 7 минут
ошибся чуточку:
21 obj_list[i]:add()
0
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63
04.05.2022, 16:07  [ТС]
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Пожалуйста, внимательнее: что есть класс, а что есть объект. Вы привели пример с автомобилем и элементы наследования. Поэтому прошу вас разобрать:
1. Автомобиль - ему нужен класс или он сразу объект?
2. Где тут требуется наследование?
3. Где композиция, а где может быть агрегация (как подвид композиции)?
Опишу, как я вижу это на данный момент изучения.

1. Я не знаю, можно ли создавать объекты без класса, то есть без шаблона. Наверное, нет. Но вот можно ли создавать объекты из других объектов, которые в свою очередь созданы как экземпляры своих классов? Наверное, можно. Стало быть, в моём примере Автомобилю класс не нужен, он существует как объект, пока существуют объекты из которых он состоит.

2. Наследование в данном примере требуется для классов, из которых создаются объекты для создания Автомобиля. Например, Суперкласс <Кузов> - Класс <Седан> - Подкласс <Тип D> - Объект "Ford Mondeo".

3. Агрегация и композиция по сути одно и то же с той лишь разнице, что при агрегации составные объекты можно удалять без вреда для созданного из них объекта. При композиции же удаление какого-нибудь составного объекта приводит к тому, что созданный объект перестаёт существовать.
Примером композиции в нашем случае может быть "Кузов", "Двигатель" или "Колёса" - убирая любой из этих элементов Автомобиль перестаёт быть автомобилем.
Примером же агрегации может быть что-то вроде "Коврик", "Аптечка" или даже "Кресло" - убирая их, Автомобиль продолжает быть автомобилем.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
04.05.2022, 18:09
Цитата Сообщение от Tavashi Посмотреть сообщение
Вы хорошо понимаете что такое ООП?
Да.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 18:11
Цитата Сообщение от Shamil1 Посмотреть сообщение
Да.
Расскажите что это.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
04.05.2022, 18:23
Цитата Сообщение от vantfiles Посмотреть сообщение
код на мой взгляд прозрачен, но если возникнут вопросы, спрашивайте.
Это не ОО код.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
04.05.2022, 18:27
Цитата Сообщение от Tavashi Посмотреть сообщение
Расскажите что это.
У Вас есть что-нибудь, кроме вопросов? Вы сформулировали утверждение. Я прошу Вас его обосновать. Если Вам для этого нужно рассказать, что такое ООП, то рассказывайте сами, а не просите меня. Если Вы не можете обосновать своё утверждение, не задавая мне вопросов, то значит Вы не можете его обосновать.

Вот Ваше утверждение:
Цитата Сообщение от Tavashi Посмотреть сообщение
ООП может существовать без наследования.
Обоснуйте.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 18:29
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если Вам для этого нужно рассказать, что такое ООП, то рассказывайте сами, а не просите меня.
Мне интересно почитать вашу версию, что такое ООП.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
04.05.2022, 18:33
Цитата Сообщение от Tavashi Посмотреть сообщение
Мне интересно почитать вашу версию, что такое ООП.
У меня нет моей версии, я использую общепринятую. Если Вам интересно, то можете открыть какой-нибудь учебник (или хотя бы википедию) и почитать.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 18:35
Shamil1, а может своими словами рассказать. Про общепринятую.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
05.05.2022, 00:46
Цитата Сообщение от Shamil1 Посмотреть сообщение
Это не ОО код.
Что такое ОО код?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
05.05.2022, 00:58
Цитата Сообщение от vantfiles Посмотреть сообщение
Что такое ОО код?
Код, который использует принципы объектно-ориентированного программирования. Упрощённо - это код, который нельзя "дословно" перевести на Хаскель, Си, Пролог и т.п..
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
05.05.2022, 06:00
Цитата Сообщение от power_factor Посмотреть сообщение
Опишу, как я вижу это на данный момент изучения.
Ладно, пора уже перейти к конкретному языку программирования. Будем считать, что абстрактную часть вы освоили, надо конкретику.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
05.05.2022, 07:31
Shamil1, Вы знаете, что первая версия ООП в с++ (точнее тогда это был еще просто с) была реализована через препроцессор?

Я чесслово не понимаю, что такого не-оо-пэ-шного в приведенном мной примере.

Есть инкапсуляция, есть полиморфизм. Да, наследования нет, есть прямая сборка объектов в рантайме. И что?
0
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63
05.05.2022, 07:51  [ТС]
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Ладно, пора уже перейти к конкретному языку программирования. Будем считать, что абстрактную часть вы освоили, надо конкретику.
Благодарю! Так и поступлю.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
05.05.2022, 11:09
Цитата Сообщение от vantfiles Посмотреть сообщение
Я чесслово не понимаю, что такого не-оо-пэ-шного в приведенном мной примере.
Ваша функция перебирает коллекцию экземпляров различных (никак не связанных между собой) пользовательских типов данных (ПТД), проверяет наличие в текущем ПТД метода с неким именем и (если есть) вызывает его. Где здесь ООП?

C#
1
2
3
 
foreach (var i in list)
{ }
Разве это ООП код?

Цитата Сообщение от vantfiles Посмотреть сообщение
Есть инкапсуляция, есть полиморфизм.
Инкапсуляция есть почти в любом ЯП, а полиморфизм бывает разный.

F#
1
let f x y = x + y
Полиморфизм есть, но где тут ООП?

Добавлено через 4 минуты
C
1
2
3
4
5
6
7
8
9
void swap(void *a, void *b, size_t size) {
    char* tmp;
    //создаём временную переменную для обмена
    tmp = (char*) malloc(size);
    memcpy(tmp, a, size);
    memcpy(a, b, size);
    memcpy(b, tmp, size);
    free(tmp);
}
Тут есть ООП?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2022, 11:09

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru