前言
面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。
类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
提示:以下是本篇文章正文内容,下面案例可供参考
一、请根据类图编写代码框架
1、
public class House {
private int roonNum;
protected String address;
private float area;
public void show() {
}
public void paint(String color) {
}
public float getArea() {
return 1;
}
}
2、
public class Book {
private String title;
private int pages;
public void trunPage(int index) {
System.out.println("The book has turn page on"+index);
}
public class sanDBook extends Book{
private String material;
public void play() {
}
public void turnPage(int index) {
System.out.println("The 3DBook has turn page on"+index);
}
}
}
3、
abstract class Animal {
private String color;
private String type;
public abstract void cry(String sound);
public void run() {
}
}
二、请根据场景描述绘制类图
1、工人(Person)会使用(useTool)螺丝刀(Screwdriver)来完成日常维修工作
2、小汽车(Car)与轮胎的关系(Wheel)
小汽车与轮胎的关系通常被认为是聚合关系。
在软件工程的领域模型中,聚合关系表示“拥有”关系,其中部分(轮胎)可以独立于整体(汽车)存在。也就是说,轮胎可以被拆卸下来用于维修、更换或者在其他汽车上使用,它的生命周期并不完全依赖于单一的小汽车。
组合关系则表示一种更强的“拥有”关系,其中部分(如汽车的发动机)的生命周期是与整体(汽车)紧密绑定的,当整体销毁时,部分也会随之销毁。在这种情况下,部分不能脱离整体而独立存在。
由于轮胎可以独立于汽车存在和使用,小汽车与轮胎的关系更符合聚合关系的定义,应该在UML图中用空心菱形表示,下面图画错了
感谢大佬【m0_62066150】指出错误!!!
3、圆(Circle)、矩形(Rectangle)和多边形(Polygon)都是形状(Shape)的一种。它们都可以移动(move),都可以变换大小(resize〉和显示(show)。但是圆具有自己的半径(radius),矩形拥有自己的长(width)和宽( height),多边形拥有自己的顶点列表( points)
4、公司(Company)是由部门(Department)构成的
请根据代码绘制类图
5、(1)
public class Head {
public Mouth mouth;
public Head() {
mouth = new Mouth();
} ……
}
public class Mouth { …… }
(2)
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
} …… }
public class Engine { …… }
6、用户小李对数据展示系统 CustomerDataDisplay 发出请求,想要读取一些信息,进行图形创建并展示,
如下类图如何修改?
三、综合题
1、茶(Tea)、咖啡(Coffee)、啤酒(Beer),都属于饮品(Beverage)的一种,它们都具有品牌(brand)、类型(typeName)、产地(place)、价格(price)等特征,它们都有一定的制作方法(make)。但是,不同的饮品,制作的方法却完全不一样。
(1)、请通过类图将上述的关系表达出来
(2)、请用代码实现 Beverage 类和 Coffee 类
package Beverage;
public class Beverage {
String brand;
String typeName;
String place;
String price;
public void make() {
System.out.println("我是饮品");
}
}
package Beverage;
public class Tea extends Beverage{
String brand;
String typeName;
String place;
String price;
public void make() {
System.out.println("我是茶");
}
}
package Beverage;
public class Coffee extends Beverage{
String brand;
String typeName;
String place;
String price;
public void make() {
System.out.println("我是咖啡");
}
}
package Beverage;
public class Beer extends Beverage{
String brand;
String typeName;
String place;
String price;
public void make() {
System.out.println("我是啤酒");
}
}
package Beverage;
public class Text {
public static void main(String[] args) {
Beverage b=new Beverage();
Beverage T=new Tea();
Beverage C=new Coffee();
Beverage B=new Beer();
b.make();
T.make();
C.make();
B.make();
}
}
2、请为汽车厂家设计一套驱动车载音响(CarAudio)的协议,让凡是遵守这个协议的车载音响制造商所生产的产品,都能在汽车(Car)上使用。车载音响上的功能包括播放(play)、暂停(pause)、上一首(prev)、下一首(next)、调节声音大(turnUp)、调节声音小(turnDown)。目前有 Philips 和 BOSE两个品牌满足这个协议。
(1)、请通过类图表达自己的设计思想
(2)、实现类 CarAudio 和 BOSE 的代码
package CarAudio;
public class BOSE implements CarAudio{
public void play() {
System.out.println("我是BOSE品牌上的播放键");
}
public void pause(){
System.out.println("我是BOSE品牌上的暂停键");
}
public void prev(){
System.out.println("我是BOSE品牌上的上一首");
}
public void next(){
System.out.println("我是BOSE品牌上的下一首");
}
public void turnUp(){
System.out.println("我是BOSE品牌上调节声音大的");
}
public void turnDown(){
System.out.println("我是BOSE品牌上调节声音小的");
}
}
package CarAudio;
public class Car {
CarAudio carAudio;
public void play() {
carAudio.play();
}
public void pause() {
carAudio.pause();
}
public void prev() {
carAudio.prev();
}
public void next() {
carAudio.next();
}
public void turnUp() {
carAudio.turnUp();
}
public void turnDown() {
carAudio.turnDown();
}
}
package CarAudio;
public interface CarAudio {
public void play();
public void pause();
public void prev();
public void next();
public void turnUp();
public void turnDown();
}
package CarAudio;
public class Philips implements CarAudio{
public void play() {
System.out.println("我是Philips品牌上的播放键");
}
public void pause(){
System.out.println("我是Philips品牌上的暂停键");
}
public void prev(){
System.out.println("我是Philips品牌上的上一首");
}
public void next(){
System.out.println("我是Philips品牌上的下一首");
}
public void turnUp(){
System.out.println("我是Philips品牌上调节声音大的");
}
public void turnDown(){
System.out.println("我是Philips品牌上调节声音小的");
}
}
(3)、请根据题 2 中给出的方案,用代码描述在一辆车上既可以使用 BOSE 音响,也可以使用 Philips音响的场景。
package CarAudio;
public class BOSEText {
public static void main(String[] args) {
Car c=new Car();
c.carAudio=new BOSE();
c.play();
c.pause();
c.prev();
c.next();
c.turnUp();
c.turnDown();
}
}
package CarAudio;
public class PuilipsText {
public static void main(String[] args) {
Car c = new Car();
c.carAudio = new Philips();
c.play();
c.pause();
c.prev();
c.next();
c.turnUp();
c.turnDown();
}
}