这是一个非常基本的一般性问题,但它非常简单。我知道你创建一个类来创建对象,但是我想知道这是不是你需要创建一个单独类的唯一原因?我问这个问题的原因是,在我正在学习的一门课程中,所有的学生都展示了一个我们都必须独立构建的程序的设计。许多学生有5-10节课,而我只有2节课。这两种选择似乎都很好用。
如果这是一个主观的问题,那么什么是最被接受的编写程序的方法。业界领袖对添加可能不是100%必要的额外类有何看法?
发布于 2016-12-12 15:47:03
以下是一些指导原则:
单一责任原则
单一责任原则基本上是说每个类应该只做一件事。如果有一个类处理两个或更多的事情,则将其拆分成多个类。
那么现在检查一下你的类,有没有类可以做很多事情,比如获取用户输入,做计算,打印结果?如果是这样的话,你可能想把它分成多个类。
抽象
OOP中的抽象是非常重要的。它基本上是将现实世界中的东西变成类或接口的过程。例如,如果您正在做一个计算应用程序,那么您将拥有一个执行实际计算的Calculator类。您还将拥有一个管理计算器窗口的CalculatorWindow类,比如侦听按钮事件。然后,这个类可以向Calculator对象提供用户输入,并让它计算结果。
设计模式
有很多设计模式可供选择。通过查看这些设计模式,您可以了解类是如何交互的,并有望了解何时创建一个新类。
发布于 2016-12-12 15:47:53
对于这个问题,没有万能的答案。
如果这是一个主观的问题,那么什么是最被接受的编写程序的方法。
显然,这个问题也是主观的。(你不会希望我们为你做个调查吧?)
业界领袖对添加可能不完全是100%必要的额外类有何看法?
你是说比尔·盖茨,拉里·埃里森?
他们可能什么都没说。
当然,有些人会站在他们的肥皂盒上,非常权威地告诉你,X Y Z是“最佳实践”或诸如此类的东西。但大多数时候,这些声明是基于(充其量)轶事证据/个人经验。换句话说,它们实际上是伪装成事实的观点。
底线:没有唯一的正确答案,所以你会学到:
(无法“工作”的两个极端是:类的粒度太细,以至于您将所有时间都花在编写和阅读样板文件上,或者类太大、太复杂,以至于您无法再理解它们。)
发布于 2016-12-12 15:50:30
不同的类用于完成不同的任务。这个减少了代码的重复使用和增加了代码的重用。这有助于您遵循设计模式轻松地解决一些关键问题。这是一个很好的实践。
这里有一个简单的例子。
对数据进行排序。
//Without using multiple class
public class A{
public static void main(String[] args){
int array[] = {1,6,1,8,34,5};
for(int i=0; i< array.length; i++){
//your procedure to sort the array
}
//other operations;
//Now you need to sort another new array (new_array[])
int new_array[] = {1,6,1,8,34,5};
for(int i=0; i< new_array.length; i++){
//your procedure to sort the new_array
}
}
}在本例中,我们使用了两个for循环来对两个不同的数组进行排序。现在看一个包含多个类的示例
public class A{
public static void main(String[] args){
int array[] = {1,6,1,8,34,5};
int my_array[] = Opertaion.sortArray(array);
//other operations;
//Now you need to sort another new array (new_array[])
int new_array[] = {1,6,1,8,34,5};
int my_new_array[] = Opertaion.sortArray(new_array);
}
}
public class Opertaion{
public static int[] sortArray(int[] array){
for(int i=0; i< array.length; i++){
//your procedure to sort the array
}
return array;
}
}上面的例子是非常简单的例子,但是当你需要做大型项目时,使用多个类将会减少你的编码时间。
假设当你在一个大项目中时
您将编写一个类来控制数据库查询,一个服务类来处理该数据库类的其他操作,一个控制器类来控制一切,等等。
https://stackoverflow.com/questions/41096038
复制相似问题