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
‘‘‘
时间: 2024-11-17 09:43:23

python之面向对象(软件开发过程、反射)的相关文章

Python【day7】:Python学习(面向对象进阶、反射、socket介绍)

面向对象进阶 1.类变量和实例变量 # 一.变量 # 变量包括:实例变量和类变量, # 他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, # 实例变量属于对象 # 类变量属于类 class Province(object): country = "中国" #类变量 def __init__(self, name): self.name = name # 实例变量 # 直接访问实例变量(实例名来调用) obj = Province('河北省') print(obj.na

Python之面向对象-反射

一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问,检测和修改它本省状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.Pythonn中的一切事物都是对象(都可以使用反射) 反射四种方法 一切皆对象,类本身也是一个对象 hasattr def hasattr(*args, **kwarg

what&#39;s the python之面向对象

编程分为面向过程和面向对象,首先我们要了解什么是面向对象. 面向对象 面向过程就是我们之前学的内容,主要是函数式,其核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的

五 面向对象软件开发

很多人在学完了python的class机制之后,遇到一个生产中的问题,还是会懵逼,这其实太正常了,因为任何程序的开发都是先设计后编程,python的class机制只不过是一种编程方式,如果你硬要拿着class去和你的问题死磕,变得更加懵逼都是分分钟的事,在以前,软件的开发相对简单,从任务的分析到编写程序,再到程序的调试,可以由一个人或一个小组去完成.但是随着软件规模的迅速增大,软件任意面临的问题十分复杂,需要考虑的因素太多,在一个软件中所产生的错误和隐藏的错误.未知的错误可能达到惊人的程度,这也

Python:面向对象的“开闭原则”和“鸭子类型”

开闭原则 开闭原则(OCP)是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作<面向对象软件构造(Object Oriented Software Construction)>中提出了开闭原则,它的原文是这样:"Software entities should be open for extension,but closed fo

软件开发过程自动化原理及技术(完整示例)

软件开发过程自动化原理及技术 一个简单完整的自动化示例 1   概述 关于本文,最开始只是想写一些关于 软件自动化测试开发 的文章,但是后来写着写着,发现不先在宏观上的软件开发过程进行介绍,不会引起大家对 自动化 技术形成了解和重视.所以本文从软件工程宏观层次进行了介绍,并和传统的实现方法做了一些对比,并附了一些代码,让有兴趣的朋友对自动化的理念及具体的实现技术手段有一些初步的认识. 既然是要 自动化 那么肯定就是冲着 效率 来的.在正式开始系统化的自动化技术学习之前,先来一个完整的示例来有个对

python之面向对象的高级进阶

一 .isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)

RUP---统一软件开发过程

更详细的见:http://www.ibm.com/developerworks/cn/rational/r-rupbp/ 本文引用:http://baike.baidu.com/view/2235832.htm#sub2235832 统一软件开发过程(Rational Unified Process,RUP)是一个面向对象且基于网络的程序开发方法论.它是用例驱动的,以架构为核心,迭代和增量的软件过程框架,它提供一种演进的特性. 二维结构 开发过程可以用二维结构或沿着两个坐标轴来表达: 横轴代表了

软件开发工具 第二章 软件开发过程及其组织

第二章 软件开发过程及其组织 为了对付“软件危机”,先后提出了结构化程序设计方法.软件工程的方法.面向对象的方法.即插即用的程序设计方法.面向互联网平台和开源软件的程序设计. 1.软件开发的基本问题及解决办法. 对程序员来说,做好软件的关键是做好两个转换: 第一个:从用户对软件的理解到程序员对软件功能的理解的转换 第二个:从程序员的理解到程序的实现 为保证第一个转换:尽可能利用标准化的方法编写程序设计任务书,用明确的语言或图形.表格,把程序要处理的信息.格式.来源.去向.存储.处理等清楚地表达处