我正面临着为一个研究项目编写一个相当大的计划,该计划可能只会由我使用,或者也可能由少数可能在将来接受它的人使用。关键是 - 它不是商业应用程序,也不会公开。而我的问题 - 在这种情况下,真正有任何好的论据背后定义我的所有类私有而不是公开? 整个代码意味着作业序列调度程序。因此,例如,我有一个基本的工作类,如下所示:
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()
函数,但是它真的有点意义吗? A - 需要时间。 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() ) ;
虽然保持私密?
答案 0 :(得分:7)
private
比依赖管理更多。
信息隐藏是好的,因为它减少了维护,但如果你把它当作一个数据元组,有什么意义呢?
你应该考虑你的类的接口,而不是提供一堆getter / setter,这样任何人都可以操作任何东西,你应该努力定义有意义的方法。
请记住,源代码首先应该是可读的。
答案 1 :(得分:1)
如果您的程序要维护一段时间并且不是一次性项目,我强烈建议使用信息隐藏,即私有成员变量和公共访问者(setter和getter)。因为你可能永远不知道什么时候你想要在某些改变时添加功能。那时你需要一个setter函数,它不仅仅是设置成员变量,而是你必须重构所有以前编写的代码。
所以我会说更好的设计。输入有点困难,但是一段典型的代码只输入一次并且读取次数很多。
答案 2 :(得分:1)
在C ++中,没有私有或公共类。您有私人,受保护或公共成员或班级。
至于编写很多类,使用继承和封装(信息隐藏) - 我强烈建议你这样做。这将确保您开发的代码更容易免于错误,并且从长远来看更容易理解,维护和修改。
答案 3 :(得分:0)
为类创建一个接口,但保持数据私有。
为什么不job_schedule.set_finish_time(i, now());
或类似?