山东大学软件学院2022年春面向对象开发技术期末考试试题

山东大学软件学院2022年春面向对象开发技术期末考试试题

时间:2022年6月23日 08:30-10:30

简答题(6分*5 = 30分)
  1. 简述多态的四种形式。

  2. 简述OOPL可能采用的内存分配方式。

  3. 解释什么叫做面向接口编程,请问在通过接口的形式调用对象时有什么优势?

  4. ppt原题(考试考了后六个)

    public class Bird {
        public void fly(Bird p) {
            System.out.println("Bird fly with Bird");
        }
    }
    
    public class Eagle extends Bird {
        public void fly(Bird p) {
            System.out.println("Eagle fly with Bird!");
        }
    
        public void fly(Eagle e) {
            System.out.println("Eagle fly with Eagle!");
        }
    }
    
    Bird p1 = new Bird();
    Bird p2 = new Eagle();
    Eagle p3 = new Eagle();
    
    p2.fly(p1);         Eagle fly with Bird!
    p2.fly(p2);			Eagle fly with Bird!
    p2.fly(p3);			Eagle fly with Bird!
    p3.fly(p1);			Eagle fly with Bird!
    p3.fly(p2);			Eagle fly with Bird!
    p3.fly(p3);			Eagle fly with Eagle!
    
  5. 选择题,选择设计模式,给了很多设计模式让你去选择

    (1) 有很多只类型的毛笔,也有很多种颜色,请问应该选用哪种设计模式

    (2) 一个类现在有sort(),serach()方法需要被实现,但是我现在有BinarySearch类的binarySearch()方法和QuickSort类的qucikSort()方法,请问应该选用何种设计模式实现

    (3) 当多个用户请求计算机执行打印操作时时,可以通过连接池相应用户的请求,请问连接池的实现应该采用什么模式?

设计题(20分*3 = 60分)
  1. 我们知道轨迹球可以用来定位图形界面的指针的位置,鼠标也可以定位图形界面指针的位置,而且两者的实现非常相似,我们现在让轨迹球类继承鼠标类。请问这样的设计模式有什么问题,违反了哪个设计原则,并说明你的理由。对于这样的问题,你认为应该怎样改进,画出类图和写出代码框架。

  2. 现在又一个工厂可以生产多种类型的电视机,我们现在想让工厂的子工厂单独生产一种电视机,比如海尔工厂就生产海尔类型的电视机,海信工厂就生产海信电视机,请给出设计模式,满足在不修改上述类的前提下就可以增加生产电视机的工厂,并画出类图和写出代码框架。

  3. (1) 现在有一个房地产公司可以售卖多种类型的房子,比如公寓,别墅等等

    (2) 每当销售人员将房子卖出去之后,主管就会接受到相应的消息。

    请结合(1)和(2),请问应该选择哪些设计模式来实现这样一个房地产信息管理系统,请分别描述你的设计模式并画出类图。

    (大致是这个意思,描述可能会有些许偏差)

代码填空题(5个空 10分)

发票问题,ppt原题改编

ppt题目:

  • 假设你需要打印发票 sales ticket , 发票有抬头、正文和脚注,发票抬头可以是企事业单位,发票号等等,脚注也是一样,可能有很多不同种类的脚注需要打印。如果发票格式固定那也就没必要继续讨论了,现在的问题是,不同的客户需要的发票或者收据的抬头或脚注,他们需要的条目是不一样的,有的需要著明单位,有的只需要发票号,但是脚注需要开票人, 等等,对你来说跟现在的 Web 系统一样,客户的要求是动态;不过发票的正文是不会变化的,是固定的.

  • image-20220623120337101
    如果你的发票格式为:
    SalesTicket Header1
    SalesTicket Body
    SalesTicket Footer1
             
    那么你可以这样去创建对象:
    new Header1(new Footer1(new SalesTicket()));
             
    如果你的发票格式为:
    SalesTicket Header1          
    SalesTicket Header2          
    SalesTicket Body          
    SalesTicket Footer1 
             
    那么你可以这样去创建对象:
    new Header1(new Header2(new Footer1(new SalesTicket())));
    
    // 原题代码回忆
    class Invoice {
        protected Invoice ticket; // 有个是定义了ticket变量
    
        public void printInvoice() {
            System.out.println("This is the content of the invoice!");
        }
    }
    
    class Decorator extends Invoice {
        public Decorator(Invoice t) {
            ticket = t;
        }
    
        public void printInvoice() {
            if (ticket != null) {
                // 填写区域1:ticket.printInvoice();
                ticket.printInvoice();
            }
        }
    }
    
    class HeadDecorator extends Decorator {
        public HeadDecorator(Invoice t) {
            super(t);
        }
    
        public void printInvoice() {
            System.out.println("This is the head of the invoice!");
            // 填写区域2:ticket.printInvoice();
            ticket.printInvoice();
        }
    }
    
    class FootDecorator extends Decorator {
        public FootDecorator(Invoice t) {
            super(t);
        }
    
        public void printInvoice() {
            // 填写区域3:ticket.printInvoice();
            ticket.printInvoice();
            System.out.println("This is the foot of the invoice!");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Invoice t = new Invoice();
            Invoice ticket;
            ticket = new HeadDecorator(new FootDecorator(new Decorator(t)));
            // 填写区域4: new HeadDecorator(new FootDecorator(new Decorator(t)));
            ticket.printInvoice();
            System.out.println("-----------------------");
            ticket = new HeadDecorator(new FootDecorator(new Decorator(null)));
            // 填写区域5:new HeadDecorator(new FootDecorator(new Decorator(null)));
            ticket.printInvoice();
        }
    }
    
    // 考试时FootDecorator和HeadDecorator继承自Decorator,Decorator继承自Invoice. 注意细节即可
    

上述回忆会有些许偏差,但是表达了原题的大致意思。

祝愿学弟学妹面向对象都A+
  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值