170 похожих чатов

Привет! Является ли хорошей практикой простую логику главного класса засовывать

в конструктор класса?

24 ответов

25 просмотров

Что есть главный класс? Что есть простая логика?

Андрей- Автор вопроса
Aleksander Spichak
Что есть главный класс? Что есть простая логика?

Главный - т. е. начальный класс. Простая логика, это создание окна и подобные инициализирующие вещи

Если при создании обьекта человек ты в конструкторе приделываешь ноги, руки и т.п. то это можно и нужно делать в конструкторе, а если что-то пойдет не так, выбросишь исключение

Обращайся и не придумывай свою терминологию "главный класс"

Андрей- Автор вопроса

Простая инициализация программы в конструкторе, какие-то простые вещи

Андрей
Простая инициализация программы в конструкторе, ка...

Инициализировать в конструкторе это нормально

Anatoly Shirokov
Если при создании обьекта человек ты в конструктор...

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

The Pressbraker
Конструктор же не приделывает , а заполняет. Разве...

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

Anatoly Shirokov
ты мыслишь каким-то догмами. я могу делать в конст...

Не понял. Значит я то то не понимаю. Ну вот есть класс человек и в нем поля туловище, голова, руки, ноги. Ты хочешь сказать, что в конструкторе я могу в класс занести новое поле? Например, поле половой орган? Насколько я знаю так можно в javascript, но не в с++.

The Pressbraker
Не понял. Значит я то то не понимаю. Ну вот есть к...

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

Michael
У тебя в классе человек может лежать изначально пу...

Ну это да. Это другое дело. Переменная - поле класса уже будет, конструктор лишь наполняет его. А вот создать новое поле, насколько я знаю возможно только в языках, с прототипным ООП как javascript

The Pressbraker
Ну это да. Это другое дело. Переменная - поле клас...

Тут никто и не говорит о создании новых полей

Насчет главного класса не скажу, а вот засовывать логику в класс идея, в принципе, нормальная. Но это зависит от того, чего ты хочешь от класса. Если класс это холодильник, то особо причин менять в нем логику нет, если же класс машинка в игре, то тогда да,- ты можешь сделать машинку, но принимающую программу работы, то есть ты можешь наполнить класс машинка некой программой извне (в с++ самое простое это передать указатель на функцию). И тогда машинка внутри себя будет вызывать функцию, переданную извне, так можно менять логику поведения объекта. Например, ты сделал игру и все хорошо, а потом решил чтоб машинка при наборе скорости близкой к максимальной становилась красного цвета. Если ты просто захардкодишь логику, то она так и будет жестко зашита в классе, а если ты будешь передавать функцию извне, то ты можешь быстро подменять логику работы машинки на ходу. То что я описал, называется передача функции как будто это данные (по факту мы передаем лишь адрес функции, но этого достаточно для вызова её клиентскому коду). Старайся только передавать чистые функции (без побочных эффектов), то есть если функция должна что то менять в классе, то создай такую функцию, которая будет что то принимать и что то отдавать. Допустим, твой класс машинка, как я уже сказал хочет менять цвет от скорости, создай функцию в которую ты будешь передавать скорость, а она будет возвращать цвет. То есть функции должно быть до лампочки куда ты этот цвет потом будешь использовать. Но можно также сделать функцию, которая будет принимать и целиком класс машинка (или указатель на него), так тоже можно, но тогда функция (ели ты передашь указатель) сможет втихаря дернуть метод твоего класса машинка и это будет побочный эффект. Лучше как я уже сказал, функцию использовать как мясорубку - положил в нее мясо, забрал из нее фарш. А дальше этот фарш уже используй где он тебе нужен, например, засунешь уже в метод класса "приготовитель котлет'

Андрей- Автор вопроса

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

Андрей- Автор вопроса
The Pressbraker
Также ты можешь сделать и вот как. Наполнить твой ...

Мне кажется, это не привычно и не интуитивно

Андрей
Мне кажется, это не привычно и не интуитивно

Ну почему же, нет это используется в автомобилях. Есть например кнопка, зимний режим, ты активируешь его и компьютер начинает использовать его. То есть в компьютере автомобиля уже заложены возможные варианты программ, а конечный пользователь выбирает. Точно также и стиральная машина автомат, в ней программы уже заложены, ты же не вставляешь картридж с программой в стиральную машину. Хотя так можно сделать, никакой проблемы в таком подходе нет.

Андрей- Автор вопроса

Можно, но я хотел бы сделать код интуитивно понятным и легко-читаемым. А гетеры и сетеры и вообще подобное разделение, будет неприятно для глаза и менее интуитивным для тех, кто в нём разбирается

Андрей
Можно, но я хотел бы сделать код интуитивно понятн...

Ты сам должен придумать абстракции, как тебе удобно. Это прикольно и интересно.

Андрей- Автор вопроса
The Pressbraker
Ты сам должен придумать абстракции, как тебе удобн...

Согласен. Однако, пока я даже нормально два файла связать не могу и об этом буду размышлять потом

Андрей
Согласен. Однако, пока я даже нормально два файла ...

Просто представь, что функция это рецепт приготовления. Вот любой рецепт из поваренной книги это есть функция. Написание функции это есть написание рецепта {возмите мясо; возьмите мясорубку; auto фарш = мясорубка.сделаймнефарш(мясо); return фарш;)

Похожие вопросы

Обсуждают сегодня

здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
1
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Карта сайта