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

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

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

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

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

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

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

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

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

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

188
 Аватар для Pphantom
2243 / 1503 / 690
Регистрация: 17.03.2022
Сообщений: 4,790
27.04.2022, 22:46
При серьезном использовании ООП, вообще говоря, надо разрабатывать не просто отдельный класс (или классы), а иерархию классов. Соответственно, если продолжать вашу аналогию, то сначала надо реализовать класс "вещь", снабдив его желаемыми общими свойствами, а затем классы-потомки, реализующие какие-то частные случаи вещей.

Заодно посмотрите понятие "абстрактный класс" - оно придумано как раз для подобной ситуации, когда некоторый класс не имеет ни одного конкретного экземпляра и предназначен только для последующего наследования потомками.
0
2279 / 1596 / 399
Регистрация: 26.06.2017
Сообщений: 4,719
Записей в блоге: 1
30.04.2022, 20:55
Цитата Сообщение от power_factor Посмотреть сообщение
или языки ООП позволяют создать некое «глобальное, общее» свойство
Во многих языках ООП есть средства указания (модификаторы доступа), что свойство или переменная (поле) является Общим. Именно общим, т.е. принадлежит классу и это свойство создаётся единожды, сколько бы экземпляров данного класса не было создано в ходе выполнения программы. Вот пример такого модификатора для платформы .Net.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
01.05.2022, 17:23
Цитата Сообщение от power_factor Посмотреть сообщение
У любого класса есть набор своих индивидуальных свойств, но ведь есть и свойства, которые будут общими для всех классов. Например, температура и плотность, если мы говорим о материальных вещах.
Наследование не завязано на общепринятую иерархию реальных объектов. Это просто один из способов повторного использования кода.

Пример.
Каждый квадрат является прямоугольником. Из этого не следует, что класс квадрат нужно наследовать от класса прямоугольник.

Современное ООП сильно отличается от того, что написано в учебниках прошлого века. Сама идея не прошла проверку временем. Слишком много проблем при дословном (изначальном) её понимании.
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,697
02.05.2022, 16:45
Если вы только начали изучать ООП, то наследование классов должны пока пропускать мимо ушей как необязательный и неосновной принцип. Вместе с полиморфизмом и инкапсуляцией. Учите сами классы/объекты без этих допфишек.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.05.2022, 01:48
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Учите сами классы/объекты без этих допфишек.
Классы без наследования - это просто "записи", которые к ООП не имеют не больше отношения, чем, например, циклы.
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,697
03.05.2022, 05:31
Shamil1, это неважно. Но основой ООП являются объекты-записи, которые следует понять. Иначе появляются такие темы.
0
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 60
03.05.2022, 14:11  [ТС]
Благодарю за помощь!

Цитата Сообщение от Shamil1 Посмотреть сообщение
Современное ООП сильно отличается от того, что написано в учебниках прошлого века. Сама идея не прошла проверку временем. Слишком много проблем при дословном (изначальном) её понимании.
Вот в том-то и дело, что я сейчас читаю литературу про объектное мышление и там все примеры "Класс-объект" представлены в виде "Транспортное средство - Самосвал", "Млекопитающее - собака", "Человек - Студент" и т. д. То есть примерами из реальной жизни. Как я подразумеваю, кнопка на экране, текст, окно программы, линия на экране и т. д. также могут являются объектами и понять это несложно. Но вот как какая-нибудь математическая функция класса Math может быть объектом мне пока неясно.

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

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

Сейчас я пытаюсь понять принципы и возможности ООП, сам код или конкретный ЯП пока осваивать рано. И вот мне интересно, так ли работает ООП на примере ниже.

Допустим, мы хотим рассчитать зависимость расхода топлива автомобиля от сопротивления ветра. У нас есть:
- классы "Колёса", "Кузов", "Двигатель". Создаём объекты этого класса и методом агрегации/композиции создаём новый объект "Автомобиль". Причём мы можем менять в нём составные объекты (например, объект класса "Кузов" менять с "Седан" на "Пикап"), но сам объект "Автомобиль" будет продолжать существовать;
- класс "Топливо";
- класс "Ветер".
Затем мы:
- устанавливаем связь (зависимость) между объектом "Автомобиль" и "Топливо", без которой у объекта "Автомобиль" невозможно выполнить метод "Ехать";
- устанавливаем связь (зависимость) между свойством "Максимальная скорость" объекта "Автомобиль" и свойством "Марка" объекта "Топливо";
- устанавливаем связь (зависимость) между свойством "Расход топлива" подобъекта "Двигатель" объекта "Автомобиль" со свойством "Скорость" объект "Ветер"
и т. д.

После, подставляя значения, производим вычисления и получаем результаты.

Понятно, что уровень детализации может быть любым и объектов может быть тысячи, но мне хочется понять, правильно ли я понимаю принципы логики ООП и так ли это делается на практике?
2
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.05.2022, 14:27
Цитата Сообщение от power_factor Посмотреть сообщение
Опыта программирования я не имею, но имею обычный житейский опыт, поэтому и пытаюсь понять принципы ООП через примеры реального мира.
имхо не имеет смысла (бесполезно). Чтобы изучать программирование, нужно знать или учить какой-нибудь ЯП. Пытаться понять смысл теории на конкретных примерах.

Цитата Сообщение от power_factor Посмотреть сообщение
так ли это делается на практике?
Нет.

Цитата Сообщение от power_factor Посмотреть сообщение
Но вот как какая-нибудь математическая функция класса Math может быть объектом мне пока неясно.
Так как в C# всё через классы, то придумали статические классы, которые, вроде, и не классы совсем, а модули.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.05.2022, 14:28
Цитата Сообщение от power_factor Посмотреть сообщение
как какая-нибудь математическая функция класса Math может быть объектом мне пока неясно
Это зависит от системы типов конкретного ЯП. Функция не обязана быть объектом. Или может быть объектом типа Function.

Цитата Сообщение от power_factor Посмотреть сообщение
сам код или конкретный ЯП пока осваивать рано
Не рано. Без конкретных ЯП, задачи и кода все последующее — бессмысленное словоблудие. Мне уже непонятно, что подразумевается под «устанавливаем связь», и закапываться в эту сторону не хочется, пока у вас не появится более конкретное представление о коде.
0
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 60
03.05.2022, 14:52  [ТС]
Понял, спасибо) Буду начинать изучать C#.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Сообщение от power_factor
так ли это делается на практике?

Нет.
Я имел в виду не конкретно как это делается на практике (очевидно, что я понятия не имею как создаются и из чего состоят программы), а принципиальную возможность решения подобных задач.


Цитата Сообщение от 0x10 Посмотреть сообщение
Мне уже непонятно, что подразумевается под «устанавливаем связь»
Я ещё не владею терминологией. Подразумеваю я именно зависимость одного от другого: меняем свойство одного объекта - меняются свойства другого/других объектов.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
03.05.2022, 16:23
Цитата Сообщение от Shamil1 Посмотреть сообщение
Классы без наследования - это просто "записи", которые к ООП не имеют не больше отношения
ООП может существовать без наследования.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.05.2022, 19:19
Цитата Сообщение от Tavashi Посмотреть сообщение
ООП может существовать без наследования.
Что Вы имеете ввиду под "ООП"? Принципы программирования или синтаксис некого конкретного ЯП?
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
03.05.2022, 19:30
Первое конечно же.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.05.2022, 21:46
Цитата Сообщение от Tavashi Посмотреть сообщение
Первое конечно же.
Имеете ввиду прототипы?
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
03.05.2022, 23:26
Цитата Сообщение от Shamil1 Посмотреть сообщение
Имеете ввиду прототипы?
Какие прототипы?
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
03.05.2022, 23:52
Tavashi,
Приведите пример, как ООП может существовать без наследования.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 00:00
Shamil1, например, через композицию.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
04.05.2022, 00:12
Цитата Сообщение от Tavashi Посмотреть сообщение
например, через композицию.
Приведите пример кода с использованием полиморфизма подтипов.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
04.05.2022, 00:14
Цитата Сообщение от Shamil1 Посмотреть сообщение
Приведите пример кода с использованием полиморфизма подтипов.
Для чего?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2022, 00:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru