• 组合与重用性


    软件重用的重要方式除了继承之外还有另外一种方式,即:组合

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合


    1.继承的方式(什么是什么的关系)

    通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。

    当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人

    2.组合的方式(什么有什么的关系)

    用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3...

    class People:
        school = "Luffycity"
    
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    class Teacher(People):
    
        def __init__(self,name,age,sex,level,salary):
            super().__init__(name,age,sex)
    
            self.level = level
            self.salary = salary
    
        def teach(self):
            print("%s is teaching" % self.name)
    
    class Student(People):
        def __init__(self,name,age,sex,class_time):
            super().__init__(name,age,sex)
    
            self.class_time = class_time
    
        def learn(self):
            print("%s is learning" % self.name)
    
    class Course:  # 课程类,学生类、老师类都有课程类,但学生类、老师类不是课程类,所以用组合
        def __init__(self,course_name,course_price,course_period):
            self.course_name = course_name
            self.course_price = course_price
            self.course_period = course_period
    
        def tell_info(self):
            print("课程名:%s 课程价格:%s 课程周期:%s" %(self.course_name,self.course_price,self.course_period))
    
    class Date:  # 生日类,学生类、老师类都有生日类,但学生类、老师类不是生日类,所以用组合
        def __init__(self,year,mon,day):
            self.year = year
            self.mon = mon
            self.day = day
    
        def tell_info(self):
            print("%s-%s-%s" %(self.year,self.mon,self.day))
    
    teacher1 = Teacher("alex",18,"male",10,3000)
    student1 = Student("张三",26,"female","08:30:00")  # 创建学生对象
    
    python = Course("Python",8999,6)  # 创建课程对象
    
    date1 = Date(1994,1,10)  # 创建生日对象
    
    student1.course = python  # 创建学生的course属性(属性名称是自己起的),令这个属性指向python这个课程对象,这就是组合的过程
    student1.birthday = date1  # 创建学生的birthday属性指向date1这个对象,这样不相关的两个类就组合起来了
    
    student1.course.tell_info()  # 调用tell_info()方法
    student1.birthday.tell_info()

    总结:

    当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

  • 相关阅读:
    百分比布局中的居中
    struts2常用标签详解
    Struts2常用标签总结
    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法
    Dbutils学习(介绍和入门)
    Ajax与JSON的一些总结
    CURD定义
    java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    a标签设置高度不生效问题
    使用iframe标签时如何通过jquery隐藏滚动条
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12176557.html
Copyright © 2020-2023  润新知