10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
1 | ||||||
Классы и объекты. Прошу проверить правильность07.05.2020, 22:57. Показов 774. Ответов 36
Метки нет (Все метки)
Всем доброго, коллеги.
Вот дошел до изучения классов, начирикал небольшой примерчик для себя, в котором игроку либо прибавляется жизнь либо наоборот. Попросил бы если можно проверить, правильно ли я понял эту тему? Ну то есть, в реальных программах так делается то вообще? Приветствую любую конструктивную критику, дабы на начальном этапе не привыкнуть делать не правильно!
0
|
07.05.2020, 22:57 | |
Ответы с готовыми решениями:
36
прошу проверить на правильность if ! ) так же прикрепил файл с блок -схемой и кодом Найти изображение функции (прошу проверить правильность решения) Прошу проверить правильность решения задач по теории принятия решений Какова вероятность того, что хотя бы 450 поступивших выдержат испытания. Прошу проверить правильность решения |
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
07.05.2020, 23:15 | 2 |
R_U_S_V, хотелось бы узнать, для чего нужен class get_heart, если у него все поля public и половина логики в main? Какую сущность должен представлять get_heart: это игрок, игровое поле, игровая логика? Для чего строки 66-73?
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
07.05.2020, 23:19 [ТС] | 3 |
get_heart - это игрок, персонаж, который ходит по игровой локации
h1.player_life; в строке 73 используется в цикле и в условии - if остальные строки)) хороший вопрос)) по ходу я их в коде пока никак не использую!
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
07.05.2020, 23:20 | 4 |
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
07.05.2020, 23:37 [ТС] | 5 |
ААА, так надо оказывается!
Я подумал, что ведь класс овечает за присвоение уровней жизни так и назвал)) Ну вот собственно не зря народ зову! Знал, что что-то пойдет не так)) Добавлено через 14 минут Вот как раз с public пока не очень разобрался, в книге написано, что нет четкого регламента когда как применять. Я думал, что в main должно быть что-то! Не все же запихивать в класс? Или это не так и лучше все засунуть в класс?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
07.05.2020, 23:42 | 6 |
Если вы делаете player_life открытым членом, то обесцениваете наличие метода get_heart класса. В любой момент некий сторонний код может взять и сломать состояние, которое задано этим методом.
Ну, вы сейчас конечно же скажете, что вы не станете писать такой код, который будет что-то ломать. А я вам скажу что вы в этом случае не совсем понимаете что такое инкапсуляция. И дам вот эту ссылку: Зачем нужна инкапсуляция? Добавлено через 1 минуту Регламента нет, но есть логическая непротиворечивость. И вот ваша обязанность делать класс таким, чтобы в нем не было противоречий.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
07.05.2020, 23:46 [ТС] | 7 | |||||
сейчас скрыл
Буду разбираться ... Да, вижу, тема классов до меня еще не дошла!
0
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
07.05.2020, 23:48 [ТС] | 8 |
ссылку принял, спасибо!
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
07.05.2020, 23:48 | 9 |
Было бы здорово, чтобы вы, прежде чем менять код, вникли в информацию, которую я выше дал.
1
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
07.05.2020, 23:50 | 10 | |||||
R_U_S_V, хорошо. Дальше можно спрятать логику в сам класс.
Тут необходимо получить ответ на вопрос, жив ли игрок. Пусть это будет метод bool is_live() , true - жив, false - мертв. Условие соответственно меняются: while (h1.is_live()) . В строке 84 аналогично, только с отрицанием.Вместо прямого изменения этих значений лучше определить метод void move(int x, int y) . Пользовательский ввод сохранять в локальные переменные x и y, а затем перемещать игрока h1.move(x, y); . Внутри метода обновлять позицию и, возможно, выполнять какие-то дополнительные проверки и действия. Метод method_get_heart конечно должен относиться к игровой логике и ему еще бы игровое поле добавить. Но пока ничего этого нет, его можно вызвать внутри метода move (и назвать именем, отражающим его суть, update_heart например). Сравните
Warning! Не принимайте, как руководство к действию, это просто пример того, что можно улучшить, но не цель и не предел.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
07.05.2020, 23:57 [ТС] | 11 |
добро.
Добавлено через 7 минут Спасибо! Да, я понимаю, мой код в принципе то рабочий и, что вариантов реализации той задачки которую я выложил много, это же с++! Я позвал Вас в эту тему именно для того, чтобы понять свои ошибки, потому как по книге это не возможно, ну в моем случае ...))
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.05.2020, 00:03 | 12 |
R_U_S_V, на самом деле от C++ тут только процентов 10. Остальная информация уже из области проектирования и архитектуры программ.
Поэтому нормальные ответы нужно искать совсем в других книгах.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
08.05.2020, 00:07 [ТС] | 13 |
Надо полагать - алгоритмы?
Добавлено через 53 секунды Задали Вы мне задачку. Пока не здаюсь
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.05.2020, 00:08 | 14 |
R_U_S_V, нет, что-то вроде этого:
Бертран Мейер, - "Объектно-ориентированное конструирование программных систем". Гради Буч, - "Объектно-ориентированный анализ и проектирование с примерами приложений на С++". Роберт Мартин, - "Чистая архитектура. Искусство разработки программного обеспечения".
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
08.05.2020, 00:12 [ТС] | 15 |
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.05.2020, 00:17 | 16 |
Что это означает? Вам не понятно, что имелось в виду?
Давайте вернемся к абстрактным примерам. Вы никогда не задумывались, почему очень многие вещи, которыми мы пользуемся, имеют корпус, оболочку, кнопки и т.п.? Ну вот например, настольная лампа. Обратите внимание, что обычно лампа сделана так, что как бы вы ее не трогали, вы не сможете пальцами замкнуть оголенные провода. Лампа включается выключателем или кнопкой, но используя ее вы не сможете включить лампу "неправильно", например сделать короткое замыкание. Иными словами кнопка "включить" - это метод класса "лампа". И ваш класс сейчас похож на такую лампу, которой вы сделали кнопку "включить", но забыли снабдить ее провода изоляцией. Иными словами, любое неосторожное действие со стороны пользователя лампы может привести к короткому замыканию. И этот факт обесценивает наличие кнопки, которую вы так старательно делали.
0
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
08.05.2020, 00:27 [ТС] | 17 |
Я понял, что данные не защищены, из-за того, что я объявил публичным - player_life с которым работает функция (метод)
Пока не понимаю как как это решить! Беру пару дней на решение самостоятельно, если не получится, позову на помощь снова. Да я понимаю это наглядный пример СПАСИБО!, я видимо просто не в полной мере еще понимаю архитектуру класса. Со структарами (чтоб ни дна им не покрышки))) проще было. Добавлено через 4 минуты А разьве нельзя заранее в виде списка объявить все переменные класса, даже если какие-то из них пока не задействованы? Или тут должен работать принцип - переменная должна быть объявлена и инициализирована в тот момент и как можно ближе к исполняющей инструкции? И заранее объявлять - это плохой тон?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.05.2020, 00:28 | 18 |
Так вы их уже объявили в строках 10-16.
А в строках 66-73 - это не объявление, а обращение к переменным объекта.
0
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
08.05.2020, 00:34 [ТС] | 19 |
Таааак, я нахрен вообще запутался))) Сорри за жаргон конечно.
Щас я разберусь с этой темой
0
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
08.05.2020, 00:38 [ТС] | 20 |
0
|
08.05.2020, 00:38 | |
08.05.2020, 00:38 | |
Помогаю со студенческими работами здесь
20
Прошу оценить правильность сверстанной формы (HTML, Bootstrap 4) Классы, объекты и self Классы и объекты Классы и объекты Классы и объекты классы и объекты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |