一、运行面向对象思想实现
超级简单需求:老张开车去东北
目的:体会面向对象思想

"""面向对象设计思想(旧)需求:老张开车去东北变化:增加飞机、汽车。。。。封装:划分类  人类  车类之前的设计思想图人类     汽车类飞机类。。。
"""
# 以下代码缺点,增加飞机类,还要修改原有代码,违背了设计思想原则里的 开-闭原则(增加新功能,不改变之前的代码)
class Person:def __init__(self, name=""):self.name = namedef go_to(self, position, vehicle):print(self.name, "去", position)if type(vehicle) == Car:vehicle.run()# 新增其他功能,加判断,改动了之前的代码,违背了开闭原则elif type(vehicle) == Airplane:vehicle.fly()class Car:def run(self):print('汽车在行驶')# 新增飞机类
class Airplane:def fly(self):print('飞机在飞行')lw = Person("老张")
c01 = Car()
a01 = Airplane()
lw.go_to("东北", c01)

二:针对以上需求,为了符合开闭原则,引出继承、多态

"""面向对象设计思想(新)需求:老张开车去东北变化:增加飞机。。。。封装:划分类  人类  车类继承:隔离    人类  与 具体的交通工具重写:具体的交通工具 重写 交通工具的方法(彰显子类个性)现在的设计思想图(抽象---统一---隔离)1 人类      2 交通工具类(运输)    3 汽车类(运输)(先用)     (后做)               4 飞机类(运输)。。。
"""
class Person:def __init__(self, name=""):self.name = namedef go_to(self, position, vehicle):print(self.name, "去", position)vehicle.transpost()class Vehicle:"""虽然没有具体功能代码,但是隔离 人类 与 具体交通工具(价值)"""def transpost(self):pass# 继承父类,重写父类中的方法(在每行首部位置,快捷键 ctrl+o)
class Car(Vehicle):def transpost(self):print('汽车在行驶')# 新增飞机类
class Airplane(Vehicle):def transpost(self):print('飞机在飞行')lw = Person("老张")
c01 = Car()
a01 = Airplane()
lw.go_to("东北", c01)

三、练习体会面向对象开闭原则

"""设计思想框架练习:情景:手雷爆炸,伤害敌人或者玩家生命变化:还可能影响树、房子、鸭子。。。要求:增加新事物,不影响手雷体会:开闭原则
"""
# --------架构师---------
class Grenades:def explode(self, target):print("手雷爆炸了")target.reduce()class Target:def reduce(self):pass# -------程序员----------
class Enemy(Target):def reduce(self):print("敌人死了")class Player(Target):def reduce(self):print("玩家受伤了")class Tree(Target):def reduce(self):print("树木落叶了")g01 = Grenades()
e01 = Enemy()
g01.explode(e01)

四、多态(练习题体会面向对象的三大特征和六大原则)

"""多态概念:父类的同一种动作或行为,在不同的子类上有不同的体现步骤:1>父类的同一种动作或行为(调用父)2>子重写3>创建子目的:在继承的基础上,体现类型的个性(彰显子类个性)增强程序扩展性,体现开闭原则
""""""设计原则1、开闭原则2、类的单一职责概念:一个类有且只有一个改变他的原因3、依赖倒置(依赖抽象)  引出继承4、组合复用原则如果仅仅为了代码复用优先选择组合复用(是一个),非继承复用(是一种)5、里氏替换1>父类出现的地方被子类替换,替换后依然保留父类功能2>子类在重写父类的方法时,尽量选择扩展重写6、迪米特法则:低耦合
"""""" 创建图形管理器(该习题综合面向对象三大特征以及六大原则整合的题,非常有价值)1、记录多个图形(圆形、矩形。。。)2、求这个图形的总面积三大特征封装:创建图形管理器类、圆形面积类、矩形面积类继承:创建图形类(抽象/统一/隔离)多态:图形管理器 调用 图形圆形、矩形重写图形向图形管理器添加圆形、矩形对象六大原则开闭:增加新图形,图形管理器不变 单一职责:图形管理器管理所有图形圆形  计算圆形面积矩形  计算矩形面积依赖倒置:图形管理器 使用父 图形组合复用:图形管理器 与 图形 """
class GraphManager:def __init__(self):self.all_graphic = []# graphic 父类def add_graphic(self, graphic):self.all_graphic.append(graphic)# 计算总面积def calculate_total_area(self):total_area =  0for graphic in self.all_graphic:# 使用所有图形统一的计算面积行为total_area += graphic.get_area()return total_areaclass Graphic:def get_area(self):# 计算该图形面积# return 图形面积pass# 父类在约束所有子类在某一行为上过达到统一
class Circle(Graphic):def __init__(self, r):self.r = rdef get_area(self):return 3.14 * self.r ** 2class Rectanle(Graphic):def __init__(self, l, w):self.l = lself.w = wdef get_area(self):return 3.14 * self.l * self.wmanager = GraphManager()
manager.add_graphic(Circle(5))
manager.add_graphic(Rectanle(5, 6))
print(manager.calculate_total_area())

五、针对上述代码进行的优化代码如下

class EmployeeManager:# 创建一个员工管理器类,为了不被其他人操作里边的数据,所以做成了私有化(__)def __init__(self):self.__all_employee = []# 创建添加员工方法def add_employee(self, employee):# 为了检测传进来的值是否属于员工,所以需要加个判断,只有当传入的对象是一种员工,才能加入到员工管理器if isinstance(employee, Employee):self.__all_employee.append(employee)# 创建计算员工总薪资方法def calculate_total_money(self):total_money = 0for employee in self.__all_employee:total_money += employee.get_money()return total_money# 为了体现继承,创建员工父类,隔离员工管理器类直接调用具体员工岗位类
class Employee:def __init__(self, base_salary):self.base_salary = base_salarydef get_money(self):passclass Programmer(Employee):def __init__(self, base_salary, bonus):super().__init__(base_salary)self.bonus = bonusdef get_money(self):# 先通过父类的方法获取底薪base_salary = super().get_money()return base_salary + self.bonusclass Tester(Employee):def __init__(self, base_salary, bugs):super().__init__(base_salary)self.bugs = bugsdef get_money(self):return super().get_money() + self.bugs * 5employee = EmployeeManager()
employee.add_employee(Programmer(8000, 10000))
employee.add_employee(Tester(5000, 500))
# 该对象传入的是非员工类,在添加到员工管理器的时候加判断了。
# employee.add_employee("大爷")
print(employee.calculate_total_money())

面向对象设计思想总结及代码相关推荐

  1. 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性

    回看最初的目标:[Java设计模式 学习目标及大纲]高质量代码的标准及实现路径在这篇Blog里我们明确了什么是高质量的代码:易维护.易读.易扩展.灵活.简洁.可复用.可测试,也知道高质量代码的达成路径 ...

  2. 从面向对象设计思想出发理解Spring AOP编程

    都说AOP是OOP(面向对象)的继承与延续,我觉得理解AOP还是得从OOP出发,经历从暴露问题到解决问题的过程. 目录 一. 面向对象设计思想(OOP) (1)概述 1. POP编程 2. OOP的优 ...

  3. 面向对象设计思想-基本概念

    面向对象最需要的是 抽象的能力. 这个能力需要通过大量编写代码和思考系统结构来获得.类与类的关系,包与包的关系,项目与项目的关系. 架构师的抽象能力要更深一层,代码结构,数据结构,文件结构,项目结构, ...

  4. 【Java设计模式 面向对象设计思想】五 多用组合少用继承编程

    我们经常会听到说多用组合少用继承,但是拜托,继承是面向对象四大特性之一啊,为什么地位反不如组合了呢,为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?围绕这三个问题进行以下讨论 ...

  5. 面向对象设计思想-C语言

    面向对象的三个特征:封装,继承,多态.但是C语言不是面向对象编程语言,所以需要借助一些技巧来实现这三个特征: (1)C语言没有成员函数,struct只能封装数据,不能封装方法,可以在struct里使用 ...

  6. 面向对象设计思想_重要_2

    Java与面向对象 对象是Java程序的核心,在Java程序中"万事万物皆对象". 对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体. 类是用来创建同一类型的对象的&q ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

  8. 面向对象设计六大基本原则

    目录 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特原则 单一职责原则 本篇开始介绍面向对象设计思想 单一职责原则,Single Responsibility Princip ...

  9. 编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌

    编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人. 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌 2)定 ...

最新文章

  1. fullPage教程 -- 整屏滚动效果插件 fullpage详解
  2. 10分钟了解Flutter跨平台运行原理!
  3. 计算机实验书,[计算机软件及应用]实验书.doc
  4. java 深拷贝_java 深拷贝与浅拷贝机制详解
  5. Fast Matrix Operations
  6. 去年写的测试GDAL用法的一些函数
  7. golang控制台颜色输出(for windows)
  8. 数据结构(java版)学习笔记(二)——线性表之顺序表
  9. 树形动规_(访问艺术馆)
  10. 二维haar小波matlab_MATLAB实验之二维小波变换[附效果图]
  11. Java 进制转换 代码
  12. Python办公自动化——8行代码实现文件去重
  13. STM32键盘扫描程序
  14. 网站访问慢?如何优化网站访问速度?
  15. Sugar BI数据可视化图表标注
  16. 计算机硬件介绍之CPU与多线程
  17. Java如何计算年龄
  18. IEEE Transactions on Instrumentation and Measurement(IEEE TIM)投稿记录
  19. 系统出错信息及解决方案(菜菜学习贴)
  20. 用c++实现俄罗斯方块(免费版)

热门文章

  1. android LinearGradient和RadialGradient
  2. 拓商:如何增加店铺权重,提升店铺转化
  3. 英文篇:大声读出来常见的关键字
  4. dede过滤规则-如何过滤(1)这种-正则表达式
  5. python字符串输入小圆点_心理学实验程序编程(python)
  6. 2016年1月2日21:38:27
  7. LWN:内核热点: folio,多代LRU,以及Rust!
  8. 【错误总结】expected specifier-qualifier-list before sth
  9. python爬取妹子图片_利用爬虫爬取清纯妹子图片
  10. 《月下独酌》 作者:李白