首页 > 代码库 > python之面向对象(软件开发过程、反射)

python之面向对象(软件开发过程、反射)

一、面向对象软件开发的过程

面向对象的软件工程包括下面几个部:

1.面向对象分析(object oriented analysis ,OOA)

    软件工程中的系统分析阶段,要求分析员和用户结合在一起,对用户的需求做出精确的分析和明确的表述,从大的方面解析软件系统应该做什么,而不是怎么去做。面向对象的分析要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,贵南出有关的对象(对象的‘特征’和‘技能’)以及对象之间的联系,并将具有相同属性和行为的对象用一个类class来标识。

    建立一个能反映这是工作情况的需求模型,此时的模型是粗略的。

2 面向对象设计(object oriented design,OOD)

    根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计。

    首先是类的设计,类的设计可能包含多个层次(利用继承与派生机制)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。

    在设计阶段并不牵涉任何一门具体的计算机语言,而是用一种更通用的描述工具(如伪代码或流程图)来描述。

3 面向对象编程(object oriented programming,OOP)

    根据面向对象设计的结果,选择一种计算机语言把它写成程序,可以是python。

4 面向对象测试(object oriented test,OOT)

    在写好程序后交给用户使用前,必须对程序进行严格的测试,测试的目的是发现程序中的错误并修正它。

    面向对的测试是用面向对象的方法进行测试,以类作为测试的基本单元。

5 面向对象维护(object oriendted soft maintenance,OOSM)

    正如对任何产品都需要进行售后服务和维护一样,软件在使用时也会出现一些问题,或者软件商想改进软件的性能,这就需要修改程序。

    由于使用了面向对象的方法开发程序,使用程序的维护比较容易。

    因为对象的封装性,修改一个对象对其他的对象影响很小,利用面向对象的方法维护程序,大大提高了软件维护的效率,可扩展性高。

 

    在面向对象方法中,最早发展的肯定是面向对象编程(OOP),那时OOA和OOD都还没有发展起来,因此程序设计者为了写出面向对象的程序,还必须深入到分析和设计领域,尤其是设计领域,那时的OOP实际上包含了现在的OOD和OOP两个阶段,这对程序设计者要求比较高,许多人感到很难掌握。

    现在设计一个大的软件,是严格按照面向对象软件工程的5个阶段进行的,这个5个阶段的工作不是由一个人从头到尾完成的,而是由不同的人分别完成,这样OOP阶段的任务就比较简单了。程序编写者只需要根据OOd提出的思路,用面向对象语言编写出程序既可。

    在一个大型软件开发过程中,OOP只是很小的一个部分。

    对于全栈开发的你来说,这五个阶段都有了,对于简单的问题,不必严格按照这个5个阶段进行,往往由程序设计者按照面向对象的方法进行程序设计,包括类的设计和程序的设计。

二、反射

1、什么是反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

2、python面向对象中的反射

Python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)。

四个可以实现自省的函数

下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

class Teacher:
    school = oldboy
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def teach(self):
        print(%s i teaching%self.name)
‘‘‘
定义一个老师的类
有3个数据属性,1个函数属性
‘‘‘

hasattr(object,name)  判断object中有没有一个name字符串对应的方法或属性。

print(hasattr(Teacher,school))    #判断Teacher中是否有school
print(hasattr(Teacher,teach))    #判断Teacher中是否有teach
‘‘‘
True
True
‘‘‘

getattr(object, name, default=None)  从object中取一个name字符串对应的方法或属性,没有返回default

print(getattr(Teacher,school,-1))
print(getattr(Teacher,teach,-1))
print(getattr(Teacher,student,-1))
‘‘‘
oldboy
<function Teacher.teach at 0x000000000280BB70>
-1
‘‘‘

setattr(x, y, v)  将对象x中的字符串为y的属性设置为v   setattr(x, ‘y‘, v) is equivalent to “x.y=v”‘

print(getattr(Teacher,school,-1))
setattr(Teacher,school,123)
print(Teacher.school)
‘‘‘
oldboy
123
‘‘‘

delattr(x, y)  将对象x中的字符串为y的属性删除   delattr(x, ‘y‘) is equivalent to “del x.y”

print(getattr(Teacher,school,-1))
delattr(Teacher,school)
print(hasattr(Teacher,school))
‘‘‘
oldboy
False
‘‘‘

 

python之面向对象(软件开发过程、反射)