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

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

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

24 ответов

49 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта