面向对象

面向对象

不打扰是莪最后的温柔 提交于 2019-12-04 17:27:32
两种编程思想:面向对象、面向过程 面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束,我们之前编程的思想也都是使用这种思想。这种编程思想,只要前面有一个步骤变了,那么后面的就也要变,后面维护起来比较麻烦,这样的编程思想,我们在写一些简单的小程序、只执行一次的脚本时可以使用。而面向对象呢,面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。 举个栗子:买车 #每个执行者都要经过这些步骤 1.第一步要到4s店,买车 2.到保险公司上保险 3.税务局交税 4.交管所上牌 def buyCar(): print('买车')def baoxian(): print('买保险')def jiaoshui(): print('交税')def shangpai(): print('上牌') #面向对象 现在有一个 买车处,安排一个人(xw)来执行上面的步骤;这就是面向过程与面向对象、面向对象包含面向过程class BuyCar: def buyCar(self): print('买车') def

面向对象 part3

守給你的承諾、 提交于 2019-12-04 14:21:04
6.2创建对象 方法:对象字面量 object构造函数 缺点:都是创建单个对象。同一个接口创建多个对象,会产生大量重复代码 6.2.1工厂模式 用函数封装以特定的接口创建对象 function createPerson (name,age) { //返回一个对象的函数就是工厂函数 var obj = { name: name, age: age, sstName: function (name) { this.name = name } } return obj } 适用场景:需要创建多个对象。 缺点: 对象没有一个具体的类型、都是Object类型。 6.2.2构造函数模式 与工厂函数区别: 没有return 没有显式创建对象 直接将属性和方法赋予给this 要创建新实例,必须用new操作符 创建一个新对象 将构造函数的作用域赋予给新对象(因此this便指向新对象) 执行构造函数中的代码(为这个新对象添加属性) 返回新对象 function Person (name,age) { this.name = name this.age = age this.setName = function (name) { this.name = name } } var p1 = new Person('tom',15) var p2 = new Person('jack',14)

java基础阶段几个面试题

我们两清 提交于 2019-12-04 13:52:09
1.说出你对面向对象的理解 在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。 面向对象有三大特性,封装、继承和多态。 封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。 继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。 如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。 2.JVM的内存区及其GC算法 https://blog.csdn.net/anjoyandroid/article/details/78609971 元空间:jdk1.8取消了持久代新增了元空间,并将方法区放在元空间中 3

Java基础语法06-面向对象-继承

强颜欢笑 提交于 2019-12-04 12:03:21
二、继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成继承关系。 继承的好处 提高 代码的复用性 。 提高 代码的扩展性 。 类与类之间产生了关系,是学习 多态的前提 。 继承的格式( extends ) 【修饰符】 class 父类 {   ... } 【修饰符】 class 子类 extends 父类 {   ... } 继承的特点一:成员变量 1、父类成员变量私有化(private) 父类中的成员,无论是公有(public)还是私有(private),均会被子类继承。 子类虽会继承父类私有(private)的成员,但子类不能对继承的私有成员直接进行访问,可通过继承的get/set方法进行访问。如图所示: 2、父子类成员变量重名 我们说父类的所有成员变量都会继承到子类中,那么如果子类出现与父类同名的成员变量会怎么样呢? 结论: (1)当父类的成员变量私有化时,在子类中是无法直接访问的,所以是否重名不影响,如果想要访问父类的私有成员变量,只能通过父类的get/set方法访问; (2)当父类的成员变量非私有时,在子类中可以直接访问,所以如果有重名时,就需要加“super."进行区别。 格式:  super.父类成员变量名 说明:虽然我们可以区分父子类的重名成员变量,但是实际开发中,我们不建议这么干。

C++面向对象 运算符重载函数

谁说我不能喝 提交于 2019-12-04 03:58:26
第十二章 运算符重载 1. C++中可以称运算符为运算符函数。 2. 运算符函数可以作为某个类的成员函数,也可以作为普通的C++函数。(常作为类的友元函数) 3. 重载运算符时,至少要有一个操作数是用户自定义的类类型(如果都是基本数据类型还有基本数据类型的指针的话,定义已经存在) 4. 重载的运算符函数不能是类的静态成员函数。 5. 重载运算符时需要遵循的规则: (1) 尽可能用引用型的参数,尽可能加const限制(避免拷贝构造函数,保护实参操作数,同时使运算符具有与常量运算的功能) (2) 尽可能采用引用返回(避免构造临时对象,使运算表达式成为左值) (3) 如果第一个操作数可能不是本类的对象的时候,必须重载为友元函数。 例子:希望日期类对象Date d(2008,8,8);与整数int n=6;进行相加运算。运算表达式d+n与n+d执行的使不同的运算符函数。前者可以作为类的成员函数,d作为第一个操作数。而后者只能作为友元函数来定义,将整数n作为第一个操作数。 6. 重载算术运算符(加减乘除) 不修改操作数,一般将运算结果存放在其他对象或者变量里然后值返回。 例如: Date operator+(const Date &d, int n) //友元函数 { Date temp(d); int m=temp.DaysOfYear()+n; temp.setDate(d.year,m

C++面向对象 类和类的对象

我的未来我决定 提交于 2019-12-04 03:52:02
期末了,总结一下教材上面的知识点 第九章 9.1 类的声明 1.在声明类的成员同时要声明该成员的访问属性。 2.C++结构体与类的唯一区别:struct成员的访问属性默认为public,class成员的访问属性默认为private。 3.一般将必须对外的部分设计成公开的,不必对外的成员设计成受保护的或者是私有的。 4.类的成员函数对于同一个类的所有数据成员具有无限制的访问能力。 9.2 对象的基本空间 5.创建对象意味着给对象分配内存空间。 6.我们将对象的非静态数据成员所占用的空间总和称为对象的基本空间。 9.3 对象的自我表现 7.this的指向被锁定不能更改。 8.常量成员函数是类的成员函数,这种函数的隐含形式参数指向本对象的常量指针常量(const * const this),故在函数体内只能读取但是不能修改本对象的任何属性 9.常量对象只能调用常量成员函数。 10.将类当中所有不修改对象属性的成员函数都设计成常量成员函数是有好处的。 9.5 类模板与模板类 11.函数模板是-在源代码级,数据类型待定而操作确定的函数描述 看一个二维向量模板的例子: template <typename TYPE>class Vec2 //类模板的声明 其中TYPE是待定数据类型,或者称为 形式数据类型 12.模板成员函数在类声明体外描述时候的书写格式: template <typename

oop面向对象知识点总结第九章

折月煮酒 提交于 2019-12-04 03:38:38
期末了,总结一下教材上面的知识点 第九章 9.1 类的声明 1. 在声明类的成员同时要声明该成员的访问属性。 2.C++ 结构体与类的唯一区别: struct 成员的访问属性默认为 public , class 成员的访问属性默认为 private 。 3. 一般将必须对外的部分设计成公开的,不必对外的成员设计成受保护的或者是私有的。 4. 类的成员函数对于同一个类的所有数据成员具有无限制的访问能力。 9.2 对象的基本空间 5. 创建对象意味着给对象分配内存空间。 6. 我们将对象的非静态数据成员所占用的空间总和称为对象的基本空间。 9.3 对象的自我表现 7.this 的指向被锁定不能更改。 8. 常量成员函数是类的成员函数,这种函数的隐含形式参数指向本对象的常量指针常量( const * const this ),故在函数体内只能读取但是不能修改本对象的任何属性 9. 常量对象只能调用常量成员函数。 10. 将类当中所有不修改对象属性的成员函数都设计成常量成员函数是有好处的。 9.5 类模板与模板类 11.函数模板是-在源代码级,数据类型待定而操作确定的函数描述 看一个二维向量模板的例子: template <typename TYPE>class Vec2 //类模板的声明 其中TYPE是待定数据类型,或者称为 形式数据类型 12.模板成员函数在类声明体外描述时候的书写格式

面向对象c++判断题总结

旧巷老猫 提交于 2019-12-03 11:26:58
1. c++结构体( struct)的成员可以有数据成员和成员函数 正确,因为 struct可以被视作一个只有 public的 class 所以可以有数据成员和成员函数 2. c++类中的所有成员函数都有一个隐含的形式参数 this指针。 错误,因为静态的成员函数没有 this指针 3. 类的静态数组成员在主函数执行前创建,程序结束时被销毁。 正确 4. 类的友元函数可以访问该类对象的受保护( protected)以及私有( private)成员。 正确,友元函数跟成员函数都有一样的权限。 5. C++的结构体( struct)以及类( class)中成员的访问属性均默认为 public 错误, struct里面默认为都是 public, class当中默认为都是 private。 6. 类的静态数据成员占用具体对象的储存空间。 错误,类的静态成员不占用具体对象的储存空间。 7. 静态成员函数不必通过该类的对象调用,可以直接用类名以及作用域分开符(::)进行调用。 正确, 8. 非静态成员函数中,隐含传递的形参 this是一个指针常量,它是一个指向不能被改变的指针。因此赋值语句 this=NULL;企图改变它的方向是错误的。 正确, this指针是一个指针常量,不能改变它的方向 9. 派生类不能继承基类中访问属性为 private的数据成员 错误,可以继承

python学习-66 面向对象3 - 多态

怎甘沉沦 提交于 2019-12-03 11:04:54
                 多态 1.什么是多态 由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同。 举例: class H2O: def __init__(self,type,tem): self.type = type self.tem = tem def turn_ice(self): if self.tem < 0: print('%s,冻成为冰了' % self.tem) elif self.tem >0: print('%s,液化成水了' % self.tem) class Ice(H2O): pass class Water(H2O): pass i1 = Ice('冰',-20) w1 = Water('水',20) def func(obj): obj.turn_ice() func(i1) func(w1) 运行结果: -20,冻成为冰了 20,液化成水了 Process finished with exit code 0 来源: https://www.cnblogs.com/liujinjing521/p/11792534.html

转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

谁说胖子不能爱 提交于 2019-12-03 04:54:26
弊端是,没有人还记得面向对象原本要解决的问题是什么。 1、面向对象原本要解决什么(或者说有什么优良特性) 似乎很简单,但实际又很不简单:面向对象三要素 封装、继承、多态 ( 警告 :事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!)。 封装 :封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫 接口 。 有了封装,就可以明确区分 内外 ,使得类实现者可以修改封装 内 的东西而不影响 外 部调用者;而外部调用者也可以知道自己不可以碰哪里。这就提供一个良好的合作基础——或者说,只要 接口 这个基础约定不变,则代码改变不足为虑。 继承+多态 :继承和多态必须一起说。一旦割裂,就说明理解上已经误入歧途了。 先说 继承 :继承同时具有两种含义:其一是继承基类的方法,并做出自己的扩展——号称解决了代码重用问题;其二是 声明 某个子类 兼容 于某基类(或者说,接口上完全 兼容 于基类),外部调用者可无需关注其差别(内部机制会自动把请求派发[dispatch]到合适的逻辑)。 再说 多态 :基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。 很显然,多态实际上是 依附于继承的第二种含义 的。让它与封装、继承这两个概念并列,是 不符合逻辑 的。不假思索的就把它们当作可并列概念使用的人,显然是从一开始就被误导了。 实践中,继承的第一种含义