抽象方法

Python——初识面向对象

孤者浪人 提交于 2019-12-03 22:34:05
阅读目录 楔子 面向过程vs面向对象 初识面向对象   类的相关知识   对象的相关知识   对象之间的交互   类命名空间与对象、实例的命名空间   类的组合用法   初识面向对象小结 面向对象的三大特性   继承   多态   封装 面向对象的更多说明   面向对象的软件开发   几个概念的说明   面向对象常用术语 回到顶部 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 人和狗的角色定制1 上面两个方法相当于造了两个模子,游戏里的每个人和每条狗都拥有相同里的属性。游戏开始,你根据一个人或一只狗传入的具体信息来塑造一个具体的人或者狗,怎么生成呢? 生成具体的人和狗 两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不? bark和walk 调用walk和bark 上面的功能实现的简直是完美! 但是仔细玩耍一会,你就不小心干了下面这件事 在玩耍中犯了一个小错误 事实 上,从你写的代码上来看,这并没出错。很显然

设计模式-抽象工厂模式

主宰稳场 提交于 2019-12-03 20:47:07
模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰的理解工厂方法模式,需要先引入两个概念: 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态 抽象工厂模式与工厂模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时

Java常考面试题(二)(转)

只愿长相守 提交于 2019-12-03 20:24:47
      序言          昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的 面试题 ,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。                                                                                   ------WZY 一、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?         自己解答:             覆盖:又称作重写, 前提条件:继承。 子类将父类中的某个方法,原封不动的抄下来,方法体中就自己写                    注意:子类重写父类的方法,访问修饰符的权限不能低于父类方法的访问修饰符, 其它返回值、方法名、参数,必须一样。             重载:不需要继承,在自己类中,和自己本类中的某个方法名相同,参数不同,其他没有限制, 这就是方法的重载。         参考答案:               Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法

区分OOA/OOD/OOP!!!!!

不打扰是莪最后的温柔 提交于 2019-12-03 15:56:19
OOA   Object-Oriented Analysis: 面向对象 分析方法   是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。   OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。   OOA在定义属性的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。   OOA在定义服务的同时要识别消息连接。当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。   OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。OOD模型由4个部分组成。它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。   一、OOA的主要原则。   (1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。   抽象原则有两方面的意义:第一

Thinking in java Chapter9 接口

一曲冷凌霜 提交于 2019-12-03 14:12:00
[ 9.1 抽象类和抽象方法] (#1) 9.2接口 9.3完全耦合 9.4Java的多重继承 9.5通过继承来扩展接口 9.5.1组合接口时的名字冲突 9.6适配接口 9.7接口中的域 9.7.1初始化接口中的域 9.8嵌套接口 9.9接口与工厂 9.10总结 9.1 抽象类和抽象方法 来源: https://www.cnblogs.com/erinchen/p/11798524.html

《设计模式之禅》之六大设计原则中篇

给你一囗甜甜゛ 提交于 2019-12-03 13:48:38
本文主要讲依赖倒置原则和接口隔离原则。 一、依赖倒置原则 1.定义 高层模块不应该依赖低层模块,两者都应该依赖其抽象; 抽象不应该依赖细节; 细节应该依赖于抽象; 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。 那什么是抽象?什么又是细节呢? 在Java语言中,抽象就是指接口或抽象类,两者都不能直接被实例化;细节就是实现类,实现接口或者继承抽象类而产生的类就是细节,其特点是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。 在Java语言中的表现就是: 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象产生的; 接口或抽象类不依赖于实现类; 实现类依赖接口或抽象类; 采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。 注意:设计是否具备稳定性,只要适当地”松松土”,观察”设计的蓝图”是否还可以茁壮地成长就可以得出结论,稳定性较高的设计,在周围环境频繁变化的时候,依然可以做到”我自岿然不动”。 2.依赖的三种写法 (1)构造函数传递依赖对象 在类中通过构造函数声明依赖对象,按照依赖注入的说法,这种方式叫做构造函数注入。 (2)Setter方法传递依赖对象 在抽象中设置etter方法声明依赖关系

程序设计原则

非 Y 不嫁゛ 提交于 2019-12-03 11:10:27
转载: https://blinkfox.github.io/2018/11/24/ruan-jian-she-ji/ruan-jian-cheng-xu-she-ji-yuan-ze/ (原文更漂亮,转载此处,仅为了方便自己阅读) 一、前言 软件也像人一样,具有生命力,从出生到死亡,会经历多种变化。软件架构设计也不是一蹴而就的,是不断地演进发展。每个程序员都可以从理解编程原则和模式中受益。 软件设计原则是一组帮助我们避开不良设计的指导方针。根据 Robert Martin 的理论,应该避免不良设计的以下三个重要特点: 僵化 :很难做改动,因为每一个细微的改动都会影响到系统大量的其他功能 脆弱 :每当你做一次改动,总会引起系统中预期之外的部分出现故障 死板 :代码很难在其他应用中重用,因其不能从当前应用中单独抽离出来 下面这些软件设计原则是我从一些书籍和网络中收集而来,并不完整,而且你也需要在一些有“冲突的原则”之间进行权衡和取舍。本文或许会对你的编程、程序设计、讨论或评审工作有所帮助。 二、通用设计原则 1. KISS 所谓 KISS 原则,即: Keep It Simple,Stupid ,指 设计时要坚持简约原则,避免不必要的复杂化,并且易于修改 。 Everything should be made as simple as possible, but not

工厂方法模式

為{幸葍}努か 提交于 2019-12-03 10:03:27
工厂方法模式是 简单工厂模式 的进一步抽象和推广,是GoF 设计模式 的一种。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。 工厂方法模式定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式类图 工厂方法模式包含如下角色: Product:抽象产品 ConcreteProduct:具体产品 Factory:抽象工厂 ConcreteFactory:具体工厂 工厂方法模式优缺点 工厂方法模式优点 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂

输入流之顶层抽象InputStream

梦想的初衷 提交于 2019-12-03 09:52:39
该类是所有二进制输入流的的抽象父类 类中主要方法解释说明如下 (1)public abstract int read() throws IOException;   该方法是从输入流中读取下一个字节,返回的值字节是一个范围从0到255之间的int数。如果读到输入流的未尾,则返回-1。 同时该方法会一直阻塞直到输入流中数据可用,或者流读完毕或者抛出异常。 下面以FileInputStream来举个示例。 读取一个文件test.txt. 该文件内容“abcdefghijklmn” @Test public void testRead() throws IOException { FileInputStream inputStream = new FileInputStream("E:\\360downloads\\wpcache\\srvsetwp\\test.txt"); while (true) { int read = inputStream.read(); if (read == -1) { break; } System.out.println(read + "," + (char) read); } } 打印结果如下:  97,a 98,b 99,c 100,d 101,e 102,f 103,g 104,h 105,i 106,j 107,k 108,l 109,m

Java基础(一)

陌路散爱 提交于 2019-12-03 09:35:32
常用语言概述 PHP:中小型后台 scala:大数据 C++:应用软件 Java:大数据,后台(大型),Andriod Python:AI Java语言概述 Java基础是学习JavaEE、大数据、Android开发的基础 Java取消了强大又危险的指针 Java提供了自动内存管理机制,由垃圾回收器在后台自动回收 Java两种核心机制 Java虚拟机:JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。 编译器的作用:将源文件编译成class文件 虚拟机的作用:将字节码class文件解释成对应平台机器码并执行 JDK(Java开发工具包)和JRE(Java运行环境):使用JDK的开发工具完成的Java程序,交给JRE去运行 配置环境环境 让任何目录都可以运行Java开发工具集 DOS命令执行Java文件 ①编译:javac 源文件名 ②运行:java 字节码文件 MVC设计模式 视图模式层(view显示数据):1、相关工具类 2、自定义 控制层(controller处理业务逻辑):1、应用界面相关 2、存放fragment 3、显示列表的适配器 4、服务器相关 5、抽取的基类 数据模型层(model主要处理数据):1、数据对象封装 2、数据库操作 3、数据库 这种模式将程序输入输出、数据处理