zoukankan      html  css  js  c++  java
  • 组合与重用性

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

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


    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()

    总结:

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

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12176557.html
Copyright © 2011-2022 走看看