面向对象

面向对象的进阶(组合和继承)

感情迁移 提交于 2020-04-01 03:22:27
初始面向对象之后,我们来学习面向对象的三大特性以及面向对象的其他补充方面的知识。 组合 组合只有一个例子因为组合只作为上一章的补充内容 #老师 课程 生日 class Course: def __init__(self,name,period,price): self.name = name self.period = period self.price = price class Birth: def __init__(self,year,month,day): self.year = year self.month = month self.day = day class Teacher: def __init__(self,name,salary,boy_friend,python): self.name = name self.salary = salary self.bf = boy_friend self.course = python python = Course('python','6 months',20000) egg = Teacher('egon',200,'yuan',python) print(egg.bf) print(egg.name) print(egg.course.name) egg_birth = Birth(1965,2,2) print

难免的尴尬:代码依赖

只愿长相守 提交于 2020-03-30 16:47:33
相关文章连接 动力之源:代码中的泵 高屋建瓴:梳理编程约定 编程之基础:数据类型(一) 编程之基础:数据类型(二) 可复用代码:组件的来龙去脉 重中之重:委托与事件 物以类聚:对象也有生命 难免的尴尬:代码依赖 12.1 从面向对象开始 12.1.1 对象基础:封装 12.1.2 对象扩展:继承 12.1.3 对象行为:多态 12.2 不可避免的代码依赖 12.2.1 依赖存在的原因 12.2.2 耦合与内聚 12.2.3 依赖造成的尴尬 12.3 降低代码依赖 12.3.1 认识抽象与具体 12.3.2 再看“依赖倒置原则” 12.3.3 依赖注入 12.4 框架中的“代码依赖” 12.4.1 控制转换 12.4.2 依赖注入对框架的意义 12.5 本章回顾 12.6 本章思考 在浩瀚的代码世界中,有着无数的对象,跟人和人之间有社交关系一样,对象跟对象之间也避免不了接触,所谓接触,就是指一个对象要使用到另外对象的属性、方法等成员。现实生活中一个人的社交关系复杂可能并不是什么不好的事情,然而对于代码中的对象而言,复杂的"社交关系"往往是不提倡的,因为对象之间的关联性越大,意味着代码改动一处,影响的范围就会越大,而这完全不利于系统重构和后期维护。所以在现代软件开发过程中,我们应该遵循"尽量降低代码依赖"的原则,所谓尽量,就已经说明代码依赖不可避免。 有时候一味地追求"降低代码依赖

C# 基础知识系列- 4 面向对象

橙三吉。 提交于 2020-03-29 17:49:18
面向对象 面向对象是一个抽象的概念,其本质就是对事物以抽象的方式建立对应的模型。 简单来讲,比如我有一只钢笔,那么我就可以通过分析,可以得到 这只钢笔的材第是塑料,品牌是个杂牌 ,里面装的墨是黑色的,可以用。这时候就能建立一个钢笔的模型,它在这里应该有这些属性: 图是一个不正确的UML类图,但是可以简单的概述一下我们抽象的结果。这个图就描述了一个我们抽象出来的钢笔类应该有哪些特性,而我手里的那只钢笔就可以看做是钢笔类的一个实例。 简单来讲,面向对象编程就是针对一个事件或者说一个过程,找到这个过程中参与的所有人、事务或者相对独立的个体,按照他们在这个过程中表现,提取出他们的特性,描述他们的行为,然后按照类别不同再抽象出类来。 所以,类是事物的概念抽象,事物是类的特殊实例。 创建一个类 上面简单的介绍了面向对象的概念,现在先创建一个C#类,然后介绍一下这个类需要注意的地方: public class Person { private static int count; public static int Count { get { return count; } set { count = value; } } private string name; public string Name { get { return name; } set { name = value; } }

23.面向对象-----static关键字

混江龙づ霸主 提交于 2020-03-29 17:32:22
一、类属性、类方法的设计思想 二、使用范围 在Java类中,可用static修饰 属性、方法、代码块、内部类。 三、static修饰成员特点 ①随着类的加载而加载; ②优先于对象存在; ③修饰的成员,被所有对象所共享; ④访问权限允许时,可不创建对象,直接被类调用 四、类变量 代码: public class test { public static void main(String[] args) { Person.country = "中国"; System.out.println(Person.country);//中国 } } class Person{ String name; int age; static String country; public void eat(){ System.out.println("人吃饭"); } } 内存解析: 五、类方法 说明: ① 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用; ② 静态方法中,只能调用静态的方法或属性;非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性 ③ 在静态的方法内,不能使用this关键字、super关键字 public class test { public static void main(String[] args) { Person.country = "中国";

js面向对象

天大地大妈咪最大 提交于 2020-03-28 06:00:08
                             JS——面向对象 1.面向对象:  js一开始就是写网页特效 面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。所以作者就受到Java和c语言的影响,往 面向对象 靠齐。js天生有一个object,但他没有面向对象的特征(封装 继承 多态)。最后研究出了 构造函数。 构造函数的最终目的是生成对象。 我们把封装的那个函数叫类 类里面的属性是私有的。 类原型上的属性是公有的,可继承的。 (1)类身上自带一个prototype的属性,属性值是对象。 (2)prototype对象天生有一个constructor属性,属性值是类本身。 (3)实例天生有一个--proto--指向自己类的原型。    原型链主要针对 对象的属性 来说; 作用域链主要是针对 变量 来说的。 2.var a和a的区别: 没有带var的变量就不能存放到内存地址中 , 就没有变量提升这种说法了。相当于给window加了一个属性window.a。 带var 可以存放在内存地址中,有变量提升,同时也相当于给window加了一个属性window.a 来源: https://www.cnblogs.com/yuanjingjing/p/9896339.html

JavaScript对象及初识面向对象

和自甴很熟 提交于 2020-03-27 08:45:59
一,JavaScript中的基本数据类型: number(数值类型) string(字符串类型) boolean(布尔类型) null(空类型) undefined(未定义类型) object 二,对象是包含相关属性和方法的集合体( 属性 方法) 三,面向对象:面向对象仅仅是一个概念或者编程思想 通过一种叫做原型的方式来实现面向对象编程 四,自定义对象:语法:var 对象名称=new Object( ); 示例: var flower=new Object(); flower.name="长春花"; flower.genera="夹竹桃科 长春花属"; flower.area="非洲、亚热带、热带以及中国大陆的华东、西南、中南等地"; flower.uses="观赏或用药等"; flower.showName=function(){ alert(this.name); } flower.showName(); 使用字面量赋值方式创建对象: var flower={ name:"长春花", genera:"夹竹桃科 长春花属", area:"非洲、亚热带、热带以及中国大陆的华东、西南、中南等地", uses:"观赏或用药等", showName:function(){ alert(this.name); } } flower.showName(); 五,内置对象:常见的内置对象

Java 面向对象 知识

被刻印的时光 ゝ 提交于 2020-03-27 00:49:21
1.面向过程和面向对象 面向过程:强调的是功能行为,以函数为最小单位, 考虑怎么做 。 面向对象:强调具备了功能的对象,以类/对象为最小单位, 考虑谁来做 。 面向过程 把大象放进冰箱 ① 把冰箱门打开 ② 抬起大象,塞进冰箱 ③ 把冰箱门关闭 面向对象 人 { 打开(冰箱) { 冰箱.开开(); } 抬起(大象) { 大象.进入(冰箱); } 关闭(冰箱) { 冰箱.闭合(); } } 冰箱 { 开开() { } 闭合() { } } 大象 { 进入(冰箱) { } } 2.类与对象 类:一类事物的描述,是抽象的、概念上的定义 对象:实实在在存在的个体,因而也称为实例(instance) 面向对象程序设计的重点是类的设计 设计类,就是设计类的成员。 3.类中属性的使用 属性 (成员变量) vs 局部变量 ①相同点: 定义变量的格式:数据类型 变量名 = 变量值 先声明,后使用 变量都有其对应的作用域 ②不同点 在类中声明的位置的不同 属性:直接定义在类的一对{}内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 关于权限修饰符的不同 属性:可以在声明属性时,指明其权限,使用权限修饰符。 常用的权限修饰符:private、public、缺省、protected --->封装性 局部变量:不可以使用权限修饰符。 默认初始化值的情况: 属性:类的属性

面向对象的JavaScript

≯℡__Kan透↙ 提交于 2020-03-22 20:04:44
多态 多态背后的思想是将“做什么”和“谁去做,怎样去做”分离开来,也就是将“不变的事物”与“可变的事物”分离开来。 其最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。 封装 目的是将信息隐藏。 封装数据: js依赖变量的作用域来实现封装特性,而且只能模拟出public和private这两种特性 var myObject = ( function () { var _name = "salody"; //私有(private)变量 return { getName: function(){ //公开(public)方法 return _name; } } })(); console.log(myObject.getName()); //输出:salody console.log(myObject._name); //输出:undefined    原型模式 从设计模式的角度讲,原型模式是用于创建对象的一种模式,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过类来创建这个对象。原型模式选择了另外一种方式,我们不在关心对象的具体类型,而是找到一个对象,然后通过 克隆 来创建一个 一模一样 的对象。   在ECMAScript5中提供了Object.create方法,可以用来克隆对象  

面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别

混江龙づ霸主 提交于 2020-03-22 12:44:04
单从字面上来讲,面向过程侧重的是“ 过程 ”,面向对象侧重的是“ 对象 ”。就像是“ 这件事该怎么做 ”与“ 这件事让谁来做 ”的区别,后者的“ 谁 ”就是对象。 面向过程(结构化)分析实质上是一种创建模型的活动,就是 面向数据 自顶向下逐步求精进行需求分析(教材P59)。其最终目标是 得出对程序处理过程的描述。 面向对象分析的关键是识别问题域内的 类和对象 ,并分析他们相互间的关系,最终 建立起问题域的正确模型 。 结构化分析方法一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。 面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来描述客观世界和设计、构建相应的软件系统。 我以为 ,面向对象的分析方法从类与对象的关系上出发,有更强的稳定性,这一重要的优点将使得当代软件工程的发展完成从传统的结构化范型到面向对象范型的转变。 来源: https://www.cnblogs.com/hello-kitty-/p/5277161.html

用例子来说明面向对象和面向过程的区别(java)

筅森魡賤 提交于 2020-03-22 11:45:45
  java是一门面向对象的语言,那对面向对象和面向过程不是很清楚的请看看下面的内容,说不定对你有帮助:   面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。   例如五子棋,面向过程的设计思路就是首先分析问题的步骤:    1、开始游戏,    2、黑子先走,    3、绘制画面,    4、判断输赢,    5、轮到白子,    6、绘制画面,    7、判断输赢,    8、返回步骤2,    9、输出最后结果。   把上面每个步骤用分别的函数来实现,问题就解决了。   而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:    1、黑白双方,这两方的行为是一模一样的,    2、棋盘系统,负责绘制画面,    3、规则系统,负责判定诸如犯规、输赢等。   第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。   可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中