Мне предстоит написать достаточно большую программу для исследовательского проекта, который, вероятно, будет использоваться только мной или, возможно, также небольшим количеством людей, которые могут взять на себя его в будущем. Дело в том, что это не коммерческое приложение, и его не будет в открытом доступе. И мой вопрос - в таком случае действительно ли есть какие-либо веские аргументы в пользу определения всех моих классов частными, а не публичными? Весь код предназначен для планировщика последовательности заданий. Итак, например, у меня есть базовый класс работы, который выглядит так:
class Job {
private: // should it be?
int Jobid;
int stack_row ; // horizontal positon in a stack
int row_height ; // position in a column of containers
float ArrivalTime;
float FinishTime;
float GantryTime;
float WaitingTime; // Job Start - Job Arrival
float ReachableTime; // later time of Vehicle or YC arrival to job location
float DueDate;
float Tardiness; // max{0, Ci-di} Ci, Completion time = Finish time; di, DueDate
float SlackTime;
int type; // 1, Loading; 2, Unloading
} ;
Затем есть класс для последовательности заданий, данных моделирования, задействованных машин и ряда других вещей. Дело в том, что я получаю много классов и еще больше компонентов для них. Все они будут использоваться либо только мной, либо небольшим количеством других людей. Я мог бы определить все классы private с функциями set_whatever()
, get_whatever()
для всех private компонентов, которые необходимо установить или прочитать, но есть ли в этом смысл? А - нужно время. B - это не очень разборчивый код, когда я пишу
job_schedule.job_list[i].set_finish_time( job_schedule.job_list[i].get_ArrivaTime() + job_schedule.job_list[i].get_ProcessingTime() ) ;
вместо
job_schedule.job_list[i] = job_schedule.job_list[i].Finish_Time + job_schedule.job_list[i].Processing_Time ;
Итак, мой вопрос: есть ли действительно веская причина, по которой я бы в этом случае придерживался частных занятий? Или, может быть, есть более элегантный способ сделать
job_schedule.job_list[i].set_finish_time( job_schedule.job_list[i].get_ArrivaTime() + job_schedule.job_list[i].get_ProcessingTime() ) ;
оставаясь приватным?
set(Time start, Duration process)
). Другое решение состоит в том, чтобы разделить класс на несколько значимых классов:class JobSchedule { public: Time getStart() const; Duration getProcessing() const; void set(Time start, Duration processing); /**/ };
, а затем составить свойJob
класс с этими значимыми блоками. Блоки — это настоящие классы (с инвариантными и сильными корреляциями между свойствами), аJob
— это просто набор. - person Matthieu M.   schedule 13.09.2011