《面向对象程序设计(python)》期末复习

本文是针对《面向对象程序设计(python)》期末考的要点复习,归纳了一些常见的基本考点,只是对知识点做了一个大致的梳理,没有细节地解释每个概念。(因为博主是全英考试,所以比较多英文)

目录

1. Classes & Objects

2. Attributes

3. Key Principles of OOP

4. Inheritance

5. Association, Composition & Aggregation

6. Modules

7. Namespaces

8. File

9. Exceptions

10. Abstract Data Types(ATDs)

11. Sort and Search

12. Object-Oriented Analysis (OOA)

13. CRC Cards

14. UML图

15. Iterator迭代器 和Generator生成器

16. Patterns设计模式


1. Classes & Objects

    Constructors, Initializers & Destructors

    __init__()构造函数的运用(记得self参数)

如果子类要访问父类的属性,要在构造函数中调用父类的构造函数

class ParentClass:
    def __init__(self,name):
        self.name = name

class ChildClass(ParentClass):
    def __init__(self, name, age):
        super().__init__(name)  # 调用父类的构造函数
        self.age = age

c = ChildClass() 
print(c.name)

2. Attributes

    Data attributes数据属性:__init__函数里定义的属性

    Class attributes类属性:__init__函数之外

    Instance attributes:实例属性

  1. 类数据属性属于类本身,可以通过类名进行访问或修改
  2. 类数据属性也可以被类的所有实例访问或修改
  3. 在类定义后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
  4. 实例数据属性只能通过实例访问
  5. 在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例。

3. Key Principles of OOP

(1)Encapsulation & Information-Hiding封装

(2)Inheritance继承

(3)Polymorphism多态

4. Inheritance

describe the subsumption (is-a) relationship

重写overriding  (不同类中名字相同,参数相同)

重载overloading  (同一类中名字相同,但参数和行为不同)

Multiple Inheritance(python允许多重继承)

5. Association, Composition & Aggregation

1. Association关联

One class uses functionalities provided by another

一个类使用另一个类的方法

2. Composition组合

part-of relationship

the child class cannot exist without the parent

3. Aggregation聚合

has-a relationship

the child can exist independently of the parent

6. Modules

modules就是.py文件

用import导入

  package:collection of modules in a folder

         require a __init__.py file (can be empty)

7. Namespaces

Attributes within an object

local names in a function

globals defined within a module

Set of built-in names

8. File

f = open(‘inputFile’,’r’)

f.read()

f.readline() 只读一行,要写循环才能读完。默认会保留换行符,读到末尾时会返回一个空字符串

f.readlines()一次读取所有行并返回一个列表,每一行都是一个字符串,默认保留换行符

f.writelines()要自己加换行符

9. Exceptions

try:

    <expression>

except <exception type>:

    <expression>

10. Abstract Data Types(ATDs)

抽象数据类型,用于描述一种数据类型的抽象特性和操作,而不涉及其具体实现

An ADT specified:

1. Data stored要存储什么数据

2. Operations on the data支持什么操作

3. Error conditions associated with operations可能出现的错误

11. Sort and Search

冒泡排序Bubble Sort

def bubbleSort(lst):
    for j in range(0,len(lst)-1):
        for i in range(0,len(lst)-1-j):
            if lst[i] >= lst[i+1]:
                lst[i],lst[i+1] = lst[i+1],lst[i]
    return lst

选择排序Selection Sort

def selectionSort(lst):
    for j in range(0,len(lst)):
        min = lst[j]
        for i in range(j,len(lst)-1):
            if lst[i] <= min:
                min = lst[i]
        lst[lst.index(min)] = lst[j]
        lst[j] = min

插入排序Insertion Sort

def insertionSort(lst):
    for i in range(1,len(lst)):
        newindex = i
        for j in range(i):
            if lst[i]<lst[j]:
                newindex-=1
        lst.insert(newindex,lst.pop(i))
    return lst

折半查找(Binary Search):数组排好序,选择中间数(low+high)//2作为基准,判断查找值与中间数的大小关系,来判断查找值在哪个区间。将区间逐渐细化直到low>=high

def binarySearch(arr, target):
    left = 0
    right = len(arr)-1

    while left <= right:
        mid = (left + right)//2
        if arr[mid] == target:
            return "目标数在第"+ str(mid+1) +"个"
        elif arr[mid] > target:
            right = mid - 1
        else:
            left = mid +1
    return "key not in the list"

12. Object-Oriented Analysis (OOA)

four parts: Problem Statement, Use Cases, CRC Cards, Class Diagram

13. CRC Cards

CRC卡用于职责分配,是交互图和类图的极简版,在初始阶段使用

Class类 类名写在整个CRC卡的最上方。

Responsibility职责 包括这个类对自身信息的了解,以及这些信息将如何运用。这个部分在CRC卡的左边。

Collaborators协作指代另一个类,这里写的信息是协作的类名。我们通过这个类获取我们想要的信息或者相关操作。这个部分在CRC卡的右边。

14. UML

Class Diagram类图

1. 泛化(Generalization/Inheritance)

【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。

【箭头指向】空心三角,实线,箭头指向父类

class Vehicle:
    pass

class Car(Vehicle):
  pass

2. 实现(Realization)

【实现关系】是一种类与接口的关系。

【箭头指向】空心三角,虚线,箭头指向接口。

Flyable可看作一个接口,Airplane是实现了这个接口的类

class Flyable:
    def fly(self):
        pass

class Airplane(Flyable):
    def fly(self):
        print('Airplane is flying.')

3. 关联(Association)

【关联关系】表示不同类或对象之间的联系。一种拥有关系,它使得一个类知道另一个类的属性和方法。

【箭头指向】普通箭头,实线,指向被拥有者。

双向的关联可以有两个箭头,或者没有箭头(无箭头的实线)。单向的关联有一个箭头。

class Car:
    def __init__(self, brand):
        self.brand = brand
        self.driver = None

    def assign_driver(self, driver):
        self.driver = driver

class Driver:
    def __init__(self, name):
        self.name = name

car1 = Car("Benz")
driver1 = Driver("John")
car1.assign_driver(driver1)

4. 聚合(Aggregation)

【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【箭头指向】空心菱形,实线,空心菱形指向整体。

class Book:
    def __init__(self, title):
        self.title = title

class Library:
    def __init__(self, books=[]):
        self.books = books

    def add_book(self, book):
        self.books.append(book)

b1 = Book('The Lord of the Rings')
b2 = Book('Harry Potter and the Philosopher\'s Stone')
l1 = Library([b1])
l1.add_book(b2)

5. 组合(Composition)

【组合关系】是一种整体与部分的关系。部分不能离开整体而单独存在。

【箭头指向】实心菱形,实线,实心菱形指向整体。

class Engine:
    def __init__(self):
        self.is_started = False

    def start(self):
        self.is_started = True

    def stop(self):
        self.is_started = False

class Car:
    def __init__(self):
        self.engine = Engine()

    def start(self):
        self.engine.start()

    def stop(self):
         self.engine.stop()

6. 依赖(Dependency)

【依赖关系】一个类的实现需要另一个类的协助。

【箭头指向】普通箭头,虚线,普通箭头指向被使用者。

class Printer:
    def print_document(self, document):
        print(f"Printing {document}...")

class Document:
    def __init__(self, content):
        self.content = content

document = Document("Hello, world!")
printer = Printer()
printer.print_document(document.content)

还可以在线上加入数字,表示两者之间的数量关系

用例图:


时序图:

15. Iterator迭代器 Generator生成器

迭代器是一个对象,包含了可以逐个访问元素的方法。

它的主要特点是惰性计算,即只有在需要时才会生成下一个元素。

迭代器通过 __iter__ 和 __next__ 方法来实现。

__iter__ 方法返回迭代器对象本身,而 __next__ 方法返回迭代器的下一个元素。当没有元素可迭代时,__next__ 方法会引发 StopIteration 异常。

class MyIterator:
    def __init__(self, max_num):
        self.max_num = max_num
        self.current_num = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current_num < self.max_num:
            self.current_num += 1
            return self.current_num
        else:
            raise StopIteration

my_iterator = MyIterator(5)

for num in my_iterator:
    print(num)

Generator生成器

生成器是一种特殊的迭代器,可以通过函数来创建。

生成器使用 yield 语句来暂停并返回一个值,保留函数的状态,直到下次调用 next() 方法时继续执行。这样可以节省内存空间,因为它们在需要时生成值,而不是一次性生成所有值。

def my_generator(max_num):
    current_num = 0
    while current_num < max_num:
        current_num += 1
        yield current_num

gen = my_generator(5)

for num in gen:
    print(num)

16. Patterns设计模式

1. Iterator迭代器模式 (Behavioral)

迭代器模式提供了一种访问一个容器对象中各个元素的方式,而不需要暴露该对象的内部细节。在Python中,可以使用生成器来实现迭代器模式。

2. Decorator装饰器模式 (Structural)

装饰器模式动态地给一个对象添加一些额外的职责,从而扩展其功能。在Python中,可以使用装饰器对函数或类进行动态包装和扩展。不需要修改原函数的内容

3. Adapter适配器模式 (Structural)

适配器模式用于将一个接口转换成另一个接口,让原本不兼容的代码能够一起工作。在Python中,可以通过继承或组合已有类的方式来实现适配器模式。

4. Strategy策略模式 (Behavioral)

策略模式定义了一系列算法族,分别封装起来,使得它们之间可以相互替换,从而让算法的使用和实现分离。在Python中,可以使用函数作为对象来实现策略模式。

5. Factory工厂模式 (Creational)

工厂模式用于创建复杂对象,将对象的创建过程封装到一个独立的类或方法中,使得客户端无需知道具体的实现细节。在Python中,可以使用工厂函数或工厂类来实现工厂模式。

工厂模式是 3 种工厂模式的总称——简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)

6. Façade外观模式 (Structural)

外观模式提供了一个简单易用的接口,隐藏了复杂系统的内部细节,从而让客户端更加容易使用。在Python中,可以使用模块来实现外观模式。

7. Singleton单例模式 (Creational)

可以使用模块或元类来实现单例模式。模块的全局变量只会在第一次导入时被初始化,并且在整个程序运行期间只有一个实例;元类可以控制类的实例化,确保每个类只有一个实例。

8. Generator Pattern生成器模式(又称建造者模式)(Creational)

在创建一个对象时,同时满足以下条件,可以使用生成器模式

  1. 对象的创建过程非常复杂
  2. 对象的创建步骤固定
  3. 不同的调用者获得的对象不完全相同

生成器模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

生成器模式与工厂模式类似,但其更善于处理创建步骤固定的复杂对象

生成器模式也不能频繁的使用,如果项目的内部变化复杂,可能会导致需要定义很多具体生成器类来实现这种变化,导致系统变得很庞大

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一种面向对象编程语言,支持类、继承、多态、封装等面向对象编程的基本特征。以下是Python面向对象编程的一些基本概念和语法: 1. 类(class):类是一种数据类型,用于定义对象的属性和方法。类是对象的模板,定义了对象的基本属性和行为。类定义通过关键字class实现。 2. 对象(object):对象是类的实例化,根据类创建的一个具体的实体。对象具有类定义的属性和方法,也可以有自己的属性和方法。对象通过类名加括号实例化。 3. 属性(attribute):属性是类或对象的数据成员,用于存储数据。属性可以是公共的、私有的或受保护的,通过访问控制符来实现。 4. 方法(method):方法是类或对象的函数成员,用于执行操作。方法可以是公共的、私有的或受保护的,通过访问控制符来实现。 5. 继承(inheritance):继承是一种机制,通过建立父类和子类之间的关系,使子类具有父类的属性和方法。子类可以继承父类的公共方法和属性,也可以重定义、扩展或覆盖父类的方法和属性。 6. 多态(polymorphism):多态是一种机制,使不同的类共享相同的接口,但具有不同的实现方式。多态通过接口继承和方法重载来实现。 7. 封装(encapsulation):封装是一种机制,将类的实现细节隐藏起来,使类的使用者无需知道类的内部实现。封装可以通过访问控制符实现,例如公共、私有和受保护的成员。 下面是一个简单的Python类的例子: ``` class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print("Hello, my name is", self.name, "and I am", self.age, "years old.") person = Person("Alice", 25) person.say_hello() ``` 这个例子定义了一个Person类,包含两个属性:name和age,以及一个方法say_hello。类的构造函数__init__初始化对象的属性,方法say_hello打印对象的属性。创建一个Person对象person,并调用say_hello方法输出对象的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值