如何使用Java严格实现给定的UML?
我正在尝试使用Java实现以下UML: 我已成功执行了所有指令,但以下指令除外: 剧院级别:如何使用Java严格实现给定的UML?,java,inheritance,uml,abstract-class,Java,Inheritance,Uml,Abstract Class,我正在尝试使用Java实现以下UML: 我已成功执行了所有指令,但以下指令除外: 剧院级别: 覆盖showArea方法并将大小乘以12显示 我是UML新手,根据我的理解,我不允许在任何类中创建构造函数。这令人困惑,因为我不知道在哪里可以定义showArea的大小 下面是我现在的工作代码 地方班 public abstract class Place { private String placeName; private int capacity; private S
- 覆盖showArea方法并将大小乘以12显示
public abstract class Place {
private String placeName;
private int capacity;
private String placeDescription;
private int workingHours;
public abstract void showEvents();
}
public abstract class Building extends Place{
public abstract void showArea();
}
public class Theater extends Building{
@Override
public void showArea() {
System.out.println("Theater area : " );
}
@Override
public void showEvents() {
System.out.println("Events ready to be hosted !!");
}
}
public class CodingtonDemo {
public static void main(String[] args) {
Theater theater = new Theater();
theater.showArea();
theater.showEvents();
}
}
建筑类
public abstract class Place {
private String placeName;
private int capacity;
private String placeDescription;
private int workingHours;
public abstract void showEvents();
}
public abstract class Building extends Place{
public abstract void showArea();
}
public class Theater extends Building{
@Override
public void showArea() {
System.out.println("Theater area : " );
}
@Override
public void showEvents() {
System.out.println("Events ready to be hosted !!");
}
}
public class CodingtonDemo {
public static void main(String[] args) {
Theater theater = new Theater();
theater.showArea();
theater.showEvents();
}
}
戏剧班
public abstract class Place {
private String placeName;
private int capacity;
private String placeDescription;
private int workingHours;
public abstract void showEvents();
}
public abstract class Building extends Place{
public abstract void showArea();
}
public class Theater extends Building{
@Override
public void showArea() {
System.out.println("Theater area : " );
}
@Override
public void showEvents() {
System.out.println("Events ready to be hosted !!");
}
}
public class CodingtonDemo {
public static void main(String[] args) {
Theater theater = new Theater();
theater.showArea();
theater.showEvents();
}
}
主类
public abstract class Place {
private String placeName;
private int capacity;
private String placeDescription;
private int workingHours;
public abstract void showEvents();
}
public abstract class Building extends Place{
public abstract void showArea();
}
public class Theater extends Building{
@Override
public void showArea() {
System.out.println("Theater area : " );
}
@Override
public void showEvents() {
System.out.println("Events ready to be hosted !!");
}
}
public class CodingtonDemo {
public static void main(String[] args) {
Theater theater = new Theater();
theater.showArea();
theater.showEvents();
}
}
控制台中的预期结果:
剧场面积:6000
活动已准备就绪,可以主持
我目前的结果:
剧院区:[还没有价值]
活动已准备就绪,可以主持 您的代码和UML不相等,您的UML存在一些问题。在您的图中,Place是一个具体的类,而您的代码将其视为一个抽象类。Place类中没有理由有私有属性,因为它的子类无法访问它们,所以它们的可见性应该被protected(UML中的符号是#)替换。building类只声明一个方法,因此它可以被一个接口(在UML中,你可以使用一个圆圈或使用接口原型)替换,而不需要任何位置继承,这个解决方案将影响剧院,而不是作为building的子代,将成为实现建筑界面的场所的子对象 关于您的代码,Theater类中的showArea方法不显示任何值,那么您为什么期望6000值呢?如果您希望6000值来自场所的容量,首先需要一个方法(可能是setter)来设置容量,在主类中使用此方法,然后使容量受保护以供剧院访问,最后在showArea方法中使用它。图表的问题 您的图表是模型的部分表示:
的属性Place
,placeName
,placeDescription
,容量
都是私有的(工作时间
)。这意味着它们既不能用于-
也不能用于建筑
。既然您没有构造函数和setter,这些属性怎么会有任何用处呢?既然您没有公共getter,那么这些值如何在更专业的类的任何剧院
操作中使用呢showXxxx()
- 既然
无法访问私有属性,也没有其他属性,那么Building
如何提供有用的东西呢showArea()
- 最后,您在
中的覆盖是正确的。但是,对于剧院
,您诊断的缺失尺寸及其初始化问题已经存在建筑
- 斜体符号是用于类名来记录它们是抽象的。它不再是抽象操作的正式定义,尽管许多(我这样说是因为我自己做的)仍然使用这种符号。因此,对具有实现的操作使用斜体是完全不明确的
不是标准的UML类型。返回void的操作只是指示,没有返回类型void
在showEvents
为一对大括号剧院中
()
«Create»
标记。使用依赖项的提供者InstanceSpecification表示构造函数操作的单个返回结果参数的默认值
这看起来像:
«Create» Place(...) : Place
您现在有了完成图表并实现预期结果的方法
可能需要更多的改进:
- 如果
未实现任何操作,则应将其抽象化,因为它无法实例化Place
- 您可以使用图表中的
显式地执行重写。但这是没有必要的{reignes…}
- 考虑到
,并且看不到任何其他事件,我猜想缺少与事件类或接口的关系showEvents()
剧院是建筑物吗?在我的镇上,有一座大楼,里面有一个购物中心和一个剧院。因此,我的建议是。免责声明:UML是作为练习提供给我的,因此我无法控制它是如何制作的。关于Place类是抽象的,如果仔细观察,ShowEvents()需要是一个抽象方法,因此我选择将Place也作为一个抽象类。关于期望值,如我所说,问题和UML,如果你再次阅读我的问题,我已经说明了我尚未实现的指令,这可能导致运行代码后得到6000的值。你混合了抽象类和抽象操作。没有一个类被定义为抽象的。为什么在UML图中,所有的成员都是用斜体写的?图表上没有写Plac