我正在开发一个小型的JAVA游戏,我对OOP概念中的衔接和耦合存在疑问。
我有一个名为Locations的类,如下所示
public class Location {
private int positionX;
private int positionY;
public Location(int positionX, int positionY){
this.positionX=positionX;
this.positionY=positionY;
}
public void updateLocation(int positionX, int positionY){
this.positionX=positionX;
this.positionY=positionY;
}
public String getLocation(){
return (positionX+","+positionY);
}
public int getLocationX(){
return this.positionX;
}
public int getLocationY(){
return positionY;
}
public void setLocationX(int positionX){
this.positionX=positionX;
}
public void setLocationY(int positionY){
this.positionY=positionY;
}
}
我有一个名为locatable的接口,如下所示
public interface Locatable {
public Location getPosition();
public void setPosition(Location position);
}
还有一个将上述接口实现为波纹管的抽象类
public abstract class GameObject implements Locatable{
protected String name;
protected Location position;
public GameObject(String name, Location position){
this.name=name;
this.position=position;
}
//------------- getter & setters for positions----------
@Override
public Location getPosition(){
return position;
}
@Override
public void setPosition(Location position){
this.position=position;
}
//------------------------------------------------------
//------------------------------------------------------
//------------- getter & setters for name ---------------
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
//------------------------------------------------------
//------------------------------------------------------
}
以及扩展上述类的类
public class Lotus extends GameObject{
private int no_of_Petals=100;
public Lotus(String name,Location position){
super(name,position);
}
//-----getters & setters for no of petals --------
public void setNoOfPetals(int no_of_Petals){
this.no_of_Petals=no_of_Petals;
}
public int getNoOfPetals(){
return no_of_Petals;
}
//------------------------------------------------
//------------------------------------------------
}
所以我对于在我的代码中使用Location类是否不是一种好的编码习惯感到困惑,就像它紧密耦合吗?还是可以吗?请让我澄清一下这个问题,因为我仍在学习有关OOP的知识。如果您要对此问题投反对票,请在执行此操作之前先评论一下我哪里错了。
答案 0 :(得分:2)
是的。 位置与您的代码紧密结合。但是,我相信如果需要的话,紧密耦合不会发生太大变化的泛型类仍然可以。
如果您仍然想松散耦合,则可以创建Location类实现的接口,并在代码中的所有位置(而不是类名)使用该接口。
然后您可以创建实现的对象,并将其传递给接口名称为形式参数的方法
答案 1 :(得分:0)
您所要求的是合成,here您可以了解更多关于合成而不是继承的信息。
对代码的注释很少:
在Lotus
构造函数中,您应该使用:
super(name, loc);
而不是:
this.name = name;
this.position = loc;
这已经在基类中实现了。
在类中为属性定义吸气剂时,无需使用this
关键字,例如:
public int getLocationX() {
return this.positionX;
}
应替换为:
public int getPositionX() {
return positionX;
}
在设置方法中,好的做法是将方法及其参数命名为类属性:
public void setPositionX (int positionX){
this.positionX = positionX;
}
由此,您可以看到可以使用this
关键字的内容。对于this
,您总是引用类属性。
我建议给自己买一本有关Java干净代码和基础知识的书。