我应该在私人项目中使用私人课程吗?

时间:2011-09-13 08:31:22

标签: c++ private public

我正面临着为一个研究项目编写一个相当大的计划,该计划可能只会由我使用,或者也可能由少数可能在将来接受它的人使用。关键是 - 它不是商业应用程序,也不会公开。而我的问题 - 在这种情况下,真正有任何好的论据背后定义我的所有类私有而不是公开? 整个代码意味着作业序列调度程序。因此,例如,我有一个基本的工作类,如下所示:

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() ) ;

虽然保持私密?

4 个答案:

答案 0 :(得分:7)

private比依赖管理更多。

信息隐藏是好的,因为它减少了维护,但如果你把它当作一个数据元组,有什么意义呢?

你应该考虑你的类的接口,而不是提供一堆getter / setter,这样任何人都可以操作任何东西,你应该努力定义有意义的方法。

请记住,源代码首先应该是可读的。

答案 1 :(得分:1)

如果您的程序要维护一段时间并且不是一次性项目,我强烈建议使用信息隐藏,即私有成员变量和公共访问者(setter和getter)。因为你可能永远不知道什么时候你想要在某些改变时添加功能。那时你需要一个setter函数,它不仅仅是设置成员变量,而是你必须重构所有以前编写的代码。

所以我会说更好的设计。输入有点困难,但是一段典型的代码只输入一次并且读取次数很多。

答案 2 :(得分:1)

在C ++中,没有私有或公共类。您有私人,受保护或公共成员或班级。

至于编写很多类,使用继承和封装(信息隐藏) - 我强烈建议你这样做。这将确保您开发的代码更容易免于错误,并且从长远来看更容易理解,维护和修改。

答案 3 :(得分:0)

为类创建一个接口,但保持数据私有。

为什么不job_schedule.set_finish_time(i, now());或类似?