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

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

27.04.2022, 16:33. Показов 16353. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru