面向对象

面向对象的认识论基础与对其的编程方法论的分析

风格不统一 提交于 2019-11-30 16:53:24
说一切都是对象是错误的。首先,对象代表的是认识的“对象”。所以任何与认识“过程”相关的东西,都不是对象。比如研究,学习,坐车,失败,,,,人类语言的能力是极其强大的,其所涵盖的领域超出任何人的想象。所以任何简单地说一切都是什么的想法,都值得一一斟酌! 对象本身其实只是作为“认识”的对象而提出来的。对象在英语中即客观,是唯物主义的基础。也就是说,一切认识都是从“对象”开始的(这可能就是“一切都是对象”的说法的来源)。一切认识都是从对象开始的并不意味着一切都是认识。因为显然在人的生活中有些东西不是认识或不能被归为认识的领域,或者说,到底什么才是“认识”呢?不管答案是什么,可以肯定的是它肯定最终仍然包含有一定的边界。它并不涵盖一切。至于它的边界到底在哪里先放一边,因为现在要做的并不是讨论哲学。 现在的论域是编程方法。 面向过程与面向逻辑或面向任何其它东西的编程方法都基于一定的假设。面向过程假设一切都是过程。面向逻辑则假设一切都是逻辑。这里的“一切都是”意指可以被最终分解成。所以当说“一切都是过程时”,说的其实是:一切都可以最终分解成过程。而对应到构建过程,就意味着“从过程开始”。对于一切都是逻辑,则意味着一切都可以或是从逻辑开始的。也就是说,从过程或逻辑,可以开始一切。这是它们的构建逻辑。 从过程或逻辑开始的构建过程,自然隐含着认为一切都是逻辑或过程的认识论基础

设计模式简介

泄露秘密 提交于 2019-11-30 16:08:11
深入理解面向对象   向下:深入理解三大面向对象机制     封装,隐藏内部实现     继承,复用现有代码      多态,改写对象行为   向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”。 如何解决复杂性?   分解:人们面对复杂性有一个常见的做法,即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。   抽象:更高层次来讲,人们处理复杂性 有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。 软件设计的目标   什么是好的软件设计?软件设计的金科玉律:复用! 重新认识面向对象   理解隔离变化     从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小   各司其职     从微观层面来看,面向对象的方式更强调各个类的“责任”     由于需求变化导致的新增类型不应该影响原来类型的实现——是所谓各负其责   对象是什么?     从语言实现层面来看,对象封装了代码和数据     从规格层面讲,对象是一系列可被使用的公共接口     从概念层面讲,对象是某种拥有责任的抽象     面向对象设计原则   1、针对接口编程,而不是针对实现编程     不将变量类型声明为某个特定的具体类,而是声明为接口    

python面向对象基础

心不动则不痛 提交于 2019-11-30 13:16:50
一、面向过程VS面向对象 面向过程 优点 :极大的降低了写代码的复杂度,只需要顺着执行的步骤,堆叠代码即可。 缺点 :一套流水线或者流程下来是用来解决一个问题,代码牵一发而动全身。 面向对象 优点 :解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。 缺点 :可控性差。 二、初识类和对象 1、类 类的声明 ''' class 类名: '类的说明文档' 类体 ''' # 创建一个类 class Student : # 类名一般开头大写 class_num = 'robot3' def stu_speak ( self ) : print ( 'student is speaking!' ) 类的两种作用:属性引用和实例化 属性引用(类名.属性) class Student : class_num = 'robot3' def stu_speak ( self ) : print ( 'student is speaking!' ) print ( Student . class_num ) # 查看学生的班级属性 print ( Student . stu_speak ) # 引用学生的说话方法 # output robot3 < function Student . stu_speak at

进阶面向对象(下)

无人久伴 提交于 2019-11-30 11:24:59
类之间的基本关系 ——继承 .从已存在类细分出来的类和原类之间具有继承关系(从老虎中细分出来的东北虎) .继承的类(子类)拥有原类(父类)所有属性和行为 ——组合 .一些类的存在必须依赖于其它的类,这种关系叫组合。(电脑由cpu、内存等组成。电脑这个类中包含着cpu类、内存类) .组合的类在某一个局部上由其它的类组成 类之间的基本关系——继承 类之间的基本关系——组合(同生死,共存亡的关系。只要缺一个,就挂了) 小结: 类之间可以存在继承关系或组合关系 继承关系中子类拥有父类的一切属性和行为 组合关系是类之间整体和部分的关系 类及类之间的关系可以有不同的表示法 编译器对类的表示法有具体的要求 来源: https://www.cnblogs.com/-glb/p/11581981.html

面向对象入门

余生长醉 提交于 2019-11-30 08:56:00
构造器 构造器是一个特殊的方法,方法名必须与类名相同,构造器不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时会报错。 实际上,类的构造器是有返回值的,当时用new关键字来调用构造器时,构造器返回该类的实例,因此构造器的返回值类型总是当前类,无须定义返回值类型。 如果类中没有定义构造器,系统自动提供空构造器,如已定义构造器,系统不会再提供空构造器。 构造器是创建对象的重要途径(即使使用工厂模式、反射等方式创建对象,其实质依然是依赖于构造器)。 使用构造器执行初始化 构造器最大的用处就是在创建对象时执行初始化。当创建一个对象时,系统为这个对象的实例变量进行默认初始化,这种默认的初始化把所有的基本类型的实例变量设为0(对数值型实例变量)或false(对布尔型实例变量),把所有引用类型的实例变量设为null。 this关键字 构造器是创建java对象的重要途径。通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不完全由构造器负责创建。创建一个对象分为如下4步: 1)、分配对象空间,并将对象成员变量初始化为0或为空 2)、执行属性值的显式初始化。 3)、执行构造器 4)、返回对象的地址给相关的变量。 this的本质就是“创建好的对象的地址”。由于在构造器调用前,对象以及创建,因此

设计模式与面向对象设计原则

痞子三分冷 提交于 2019-11-30 08:49:51
文章目录 一、分解与抽象 1、分解-分而治之 2、抽象-面向对象 二、设计模式基本原则 1、依赖倒置原则(DIP) 2、开放封闭原则(OCP) 3、单一职责原则(SRP) 4、里氏替换原则(LSP) 5、接口隔离原则(ISP) 6、优先使用对象组合,而不是类继承 7、封装变化点 8、针对接口编程,而不是针对实现编程    使用设计模式是为了可重用代码 ,让代码更容易被他人理解,保证代码可靠性,设计模式使代码编制真正工程化。 一、分解与抽象 1、分解-分而治之    人们面对复杂性有一个常见的做法:即分而治之, 将大问题分解为多个小问题,将复杂问题分解为多个简单问题 。其思想我们在数据结构中有提及。分解主要用于结构化设计思维:像C语言之类,当然我们在C++面向对象中也可以使用,但是我们尽可能使用抽象思想。 class Point { public : int x ; int y ; } ; class Line { public : Point start ; Point end ; Line ( const Point & start , const Point & end ) { this - > start = start ; this - > end = end ; } } ; class Rect { public : Point leftUp ; int width ;

Java总论及三大特性理解

故事扮演 提交于 2019-11-30 07:34:41
1、对象(object) 万物皆为对象(根类Object类)。 程序是对象的集合(面向对象程序设计语言OOP)。 每个对象都有自己的由其他对象所构成的存储(对象有成员属性)。 每个对象都拥有其类型(每个对象都是某个类class的一个实例instance) 。 某一特定类型的所有对象都可以接收同样的信息(继承)。 2、类型(type) 类描述具有相同特性(数据元素)和行为(功能)的对象集合。是面向对象设计除了基本数据类型外的,一种通用的数据类型。 3、对象作为“服务提供者” 提高对象的内聚性,将对象的设计简化,并凸显其提高的服务价值。 高质量代码的基本要求是:可复用、高内聚、低耦合。 4、封装(信息隐藏) 指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。 一句话总结: 所谓封装,就是把数据和方法保护在类的内部,只允许可信的类或对象操作,对不可信的进行信息隐藏。 好处: (1)实现了专业的分工。 将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用

JavaScript面向对象

拜拜、爱过 提交于 2019-11-30 06:23:35
面向对象的概念: - 两种编程思路: 函数式(过程式)、面向对象(OOP) - 类 : 具有相同的属性和方法的一类对象的抽象 - 实例 :某一类当中的一个对象 - 对象: 具有属性和方法的具体的事物 面向对象的创建: 普通模式——每次创建对象都要设置一遍属性,属性相同时,代码冗余; ``` var girl1 = { name: '如花', age: 18, sex: '女' ; var girl3 = new Object(); girl3.name = '春花'; girl3.age = 19; girl3.sex = '女'; ``` 工厂模式——把创建对象和返回对象的功能封装在函数中,减少代码冗余,没有类的概念; ``` function girl(name, age, sex) { var obj = new Object(); /* 创建对象 */ obj.name = name; obj.age = age; obj.sex = sex; return obj; /* 返回对象 */ } var g1 = girl('如花', 18, '女'); console.log(g1); var g2 = girl('似玉', 18, '女'); console.log(g2); console.log(g1 instanceof girl); //false ```

GoLang中面向对象的三大特性

喜欢而已 提交于 2019-11-30 06:18:00
有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。   作为集大成者的 Go 语言,自然不会在面向对象上面无所作为。相比较 java、C#、C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解。下面,我们不妨用三个简单的例子来说明一下 go 语言下的面向对象是什么样的。 封装特性 package main import "fmt" type data struct { val int } func (p_data *data) set(num int) { p_data.val = num } func (p_data *data) show() { fmt.Println(p_data.val) } func main() { p_data := &data{4} p_data.set(5) p_data.show() } 继承特性 package main import "fmt" type parent struct { val int } type child struct {

java的包装类型

前提是你 提交于 2019-11-30 03:10:48
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 此上为针对基本类型列举的封装类(不包含所有) 由于基本数据类型是非面向对象的,因此java为基本类型提供了封装类,使我们可以采用面向对象的方式操作基本数据类型。 我们可以通过java api查到,在java.lang下面包含了所有基本类型的包装类 我们列举其中几个进行一下讲解 Byte 包装类,可以在api中发现它有去实现如下两个接口类 Serializable , Comparable < Byte > 所以可以进行序列化,与比较 static int BYTES 用于表示二进制补码二进制形式的 byte 值的字节数。 static byte MAX_VALUE 一个保持最大值一个 byte 可以有2^7 -1。 static byte MIN_VALUE 的常量保持的最小值的 byte 可以具有,- 2^7。 static int SIZE 用于表示二进制补码二进制形式的 byte 值的位数。 static 类 < Byte > TYPE 类 原始类型 byte 的 类 实例。 验证一下 System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte");