Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366

Не могу понять ООП

29.08.2013, 16:17. Показов 4401. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет Всем, не так давно дошел до ООП, вроде как бы все понятно, но есть несколько вопросов- увы учусь сам, спросить кроме Вас не у кого

Вопрос\рассуждение : Классы это как бы функции которые как бы описывают некий объект и взаимодействуют между собой так же как функции в структурном программировании. Каждый класс должен работать как бы играя роль какого то объекта в общей задаче?
Например пример построение лифта ( задачка с книги)
Я так понимаю что я должен сделать класс: человек;лифт и кнопки внутри лифта; здание с этажами...
Вот так я себе представляю взаимодействие классов:
Класс человек создает рандом человека в конструкторе и передает как бы себя ( этаж появления),объекту класса лифт (объект лифта объявлен в классе человека),класс лифт в конструкторе генерирует рандом нажатие кнопки внутри лифта и передает это классу здание, в классе здание хранится текущий этаж лифта и тот на который он якобы должен ехать, потом он перезаписывает переменную и все продолжается по кругу...

Я правильно понимаю ооп, а то мне кажется что я слишком все разбил и классов слишком много для такой задачи...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.08.2013, 16:17
Ответы с готовыми решениями:

Не могу понять задание по "ООП"
Добрый вечер! Задание вообщем не сложное и в реализации проблем не ощущаю, но никак не могу разобрать один момент: "Описать...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Стек статически (на основе массива структур). Пример структура "Товар" которая включает в себя: № по каталогу(ключ), Название, цена, срок...

ООП - задачка, понять и суметь. Разбор ошибок
Дан массив действительных чисел b1;…;b10 .. Найти сумму элементов расположенных после минимального элемента.Поля и данные - закрытого типа....

28
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.08.2013, 16:33
Цитата Сообщение от MousePro Посмотреть сообщение
Класс человек создает рандом человека в конструкторе
Сразу фейл. Почему один человек создает другого человека? Либо создаем извне, либо делаем фабрику.
Цитата Сообщение от MousePro Посмотреть сообщение
объект лифта объявлен в классе человека
У каждого человека есть лифт что-ли?
Цитата Сообщение от MousePro Посмотреть сообщение
класс лифт в конструкторе генерирует рандом нажатие кнопки внутри лифта
Вы уверены, что человек вошедший в лифт хочет поехать на рандомный этаж?
Цитата Сообщение от MousePro Посмотреть сообщение
в классе здание хранится текущий этаж лифта и тот на который он якобы должен ехать
В здании есть лифт, несомненно (хотя может и не быть). Но заради чего зданию знать на какой этаж едет лифт?
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
29.08.2013, 16:39
Класс описывает состояние (данные) и набор операций над ним (интерфейс).
1
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
29.08.2013, 16:41  [ТС]
1.Создаю как бы человека на этаже(просто рандом создаю этаж)
2.Ну я еще не дошел до очередей и т.п. могу сделать лифт как статик
3.Ну тут проблем нет,можно сделать что бы вводил, но я хотел что бы полностью автоматом)
4.Ну что бы не получилось что человек захочет ехать на тот же этаж на котором он находится.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 16:41
Цитата Сообщение от MousePro Посмотреть сообщение
Классы это как бы функции
Класс - пользовательский тип данных. Есть встроенные типы данных (int, char и пр.), и есть типы данных, которые создаёт сам пользователь. Это и есть классы. Каждый класс содержит в себе набор данных (челены-данные) и набор функций (члены-методы), которые могут выполняться над этими данными. Иначе можно сказать, что класс обладает свойствами и поведением. В отличие от встроенных типов данных, которые используются для решения любых задач, классы создаются под решение определённой задачи. Хорошо сконструированный класс можно использовать так же, как и встроенные типы данных.

Классы: человек, здание, лифт, кнопки. Здание состоит за этажей, содержит лифт, лифт содержит кнопки. Чловек сам по себе. Человек может входить и выходить на этажах, нажимать кнопки. Лифт может перемещаться по этажам, согласно нажатым кнопкам, открывать\закрывать двери.
1
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
29.08.2013, 16:45  [ТС]
Короче я лучше напишу и выложу сюда то что получится
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.08.2013, 16:46
MousePro,
Цитата Сообщение от MousePro Посмотреть сообщение
Ну что бы не получилось что человек захочет ехать на тот же этаж на котором он находится.
Это должен контролировать лифт.
Цитата Сообщение от MousePro Посмотреть сообщение
Создаю как бы человека на этаже(просто рандом создаю этаж)
Тогда это должно происходить извне. В main функции.
Цитата Сообщение от MousePro Посмотреть сообщение
Ну тут проблем нет,можно сделать что бы вводил, но я хотел что бы полностью автоматом)
Проблема есть. Не лифт должен генерировать этаж, а человек указывать на какой он хочет поехать.
Цитата Сообщение от MousePro Посмотреть сообщение
Ну я еще не дошел до очередей и т.п. могу сделать лифт как статик
Тем более глупо. В лифте может быть много пассажиров так-то.
1
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
29.08.2013, 16:54
Мой вариант:

1. Класс здание. У него есть свойство "количество этажей" и "количество подъездов". И public методы "получить количество этажей" и "получить количество подъездов".

2. Класс лифт. У него есть свойства "на каком этаже он находится" и методы "ехать вверх" и "ехать вниз". Ехать вверх увеличивает свойство "на каком этаже он находится", метод "ехать вниз" уменьшает.
Количество этажей лифт берет у здания.

3. Класс человек. Человек пользуется методами лифта.

Итого.

1. Создаем экземпляр здания. В конструкторе пишем сколько этажей и подъездов.
2. Создаем экземпляры лифтов. В конструкторе берем у здания этажи и подъезды. Создаем столько лифтов, сколько подъездов + пишем лифту максимальное количество этажей как у здания.
3. создаем класс человек. в классе человек уже прописываем методы типа "вызвать лифт", "выбрать этаж" и т.д.
2
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.08.2013, 16:55
Цитата Сообщение от ForEveR Посмотреть сообщение
Проблема есть. Не лифт должен генерировать этаж, а человек указывать на какой он хочет поехать.
Наверное имеется в виду, что чтобы не тыкать постоянно за каждого человека в каждом лифте куда ему следует отправиться, написать заглушку, которая будет отправлять всех людей на случайный этаж, как будто они сами куда-то нажали. Но метод отправки лифта все равно писать нужно да.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.08.2013, 16:57
Цитата Сообщение от MousePro Посмотреть сообщение
мне кажется что я слишком все разбил и классов слишком много для такой задачи...
Правильно кажется.
Классы, ООП - это не должно быть самоцелью.
Они должны упрощать разработку и сопровождение проекта, а не решать
вопросы типа "человек должен наследоваться от лифта или лифт от человека".
2
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
29.08.2013, 17:00
Цитата Сообщение от Убежденный Посмотреть сообщение
Они должны упрощать разработку и сопровождение проекта,
Плюс возможность изменения и добавления чего-то в коде. Чтобы можно было например легко модифицировать отдельный класс "лифт", добавив к нему перегруз или "вызов лифтера" и не править при этом другие классы сильно.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.08.2013, 18:44
По-хорошему, я это вижу примерно так.
Здание, в здании есть лифт/ы, есть этажи. На каждом этаже есть кнопка/и вызова лифта/ов. При нажатии на кнопку вызова лифта на любом этаже - лифту подается команда. При нажатии в лифте кнопки - лифту опять же подается команда. А дальше уже зависит от логики, кол-ва лифтов, желания намутить.
1
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
29.08.2013, 19:12  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
По-хорошему, я это вижу примерно так.
Здание, в здании есть лифт/ы, есть этажи. На каждом этаже есть кнопка/и вызова лифта/ов. При нажатии на кнопку вызова лифта на любом этаже - лифту подается команда. При нажатии в лифте кнопки - лифту опять же подается команда. А дальше уже зависит от логики, кол-ва лифтов, желания намутить.
Не поверишь, я тоже знаю как работает лифт
0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
29.08.2013, 19:16
То как вижу я:

Есть человек:

C++
1
2
3
4
5
class Person
{
    std::string name;                   // Имя человека
    std::weak_ptr<class Floor> floor;   // Оставляем ссылку, чтоб человек знал на котором этаже находится.
}
Есть этаж, на котором могут быть люди. На этаже можно вызвать лифт.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Floor
{
    int numb_floor;                         // Номер этажа.
    std::weak_ptr<class Building> building; // Этаж это всего лишь часть здания.
    list<shared_ptr<class Person> > people; // Список людей на этаже.
 
    // Вызов лифта
    void callLift()
    {
        building->callLift( numb_floor );
    }
}

Есть здание, которое состоит из этажей и лифта:

C++
1
2
3
4
5
6
7
8
9
10
class Building
{
    list<shared_ptr<class Person> > floors; // Список этажей
    shared_ptr<class Lift> lift; // Лифт
 
        void callLift( int floor )
        {
               lift->call( floor );
        }
};

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

Если нам нужно добавить, например, квартиры - мы просто создаём новый класс и связываем его с этажом, вместо того чтоб лопатить весь, и так запутаный, код.
1
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
29.08.2013, 19:18  [ТС]
Квадро, я половину операторов которые ты тут написал не знаю например < .... >
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.08.2013, 19:19
kvadro, ИМХО здание должно быть non-copyable, посему shared_ptr-ы там все же лишние, достаточно unique.
1
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
29.08.2013, 19:23
MousePro
Если мы "достроим новый лифт" - нам нужно будет переделать логику только метода callLift, класса Building, который будет определять какой лифт возможно вызвать, не трогая остальные классы. В процедурном стиле опять же пришлось лопатить весь код.

ForEveR
Ага, ошибся, сам 6 день учу C++.
1
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
29.08.2013, 20:06
MousePro, если хочешь понять что такое классы, запрограммируй задачу на структурах и функциях. А потом сделай то же самое (на форуме помогут) с помощью классов. Вот тогда и увидишь, в чем преимущество классов и как они работают... Кстати, если программа будет правильная, классы "вырастут" из структур, а часть функций переместятся извне внутрь классов.
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
29.08.2013, 20:25  [ТС]
Цитата Сообщение от zer0mail Посмотреть сообщение
MousePro, если хочешь понять что такое классы, запрограммируй задачу на структурах и функциях. А потом сделай то же самое (на форуме помогут) с помощью классов. Вот тогда и увидишь, в чем преимущество классов и как они работают... Кстати, если программа будет правильная, классы "вырастут" из структур, а часть функций переместятся извне внутрь классов.
Да я уже кодил на классах, просто тут задача усложнилась ( след. главу прочитал), а в ней тут и динамическое выделение new-delete, композиция, статик объявления,связывание (this) и я во всем этом запутался...
0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
29.08.2013, 20:38
MousePro
Смени книгу, например на Прата, там он постепенно подходит и к дин. памяти и к классам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2013, 20:38
Помогаю со студенческими работами здесь

Не могу сделать полиморфизм. Не могу до конца понять пример по этому поводу
Есть такая задача: Класс Animal должен быть абстрактным, имеет имя и вес. Класс Reptile имеет habitate, который держит в себе среду...

Не могу понять почему не могу считать символьный ряд через cin.getline
Не могу понять почему не могу считать символьный ряд через cin.getline.Помогите позязя. #define _CRT_SECURE_NO_WARNINGS #include...

ООП C++ НЕ могу понять задание
Создать класс - целое число. В закрытой части описать поля: систему счисления и строка символов, соответствует числу. Определить...

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

Как понять поставленную задачу. Не могу понять этот полиморфизм?
A software academy teaches two types of courses: local courses that are held in some of the academy’s local labs and offsite courses held...


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

Или воспользуйтесь поиском по форуму:
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