面向对象 —— 对类(class)的理解
类是成员变量和成员函数的封装,封装的一个重要功能就是可见性(继承除外,当然继承是面向对象的另外一个重要特性),所谓可见性,类内可见,类外不可见。可见性保证了类型安全(type-safe)
对类进行实例化(调用类的构造函数),获取类的对象,单是从类和对象的分别的命名上,也能体会类与对象的区别,类一般是抽象名词(Host),对象则是具体名词(Customs)。
0. 成员变量的选择
一个对象类,当然不只有限的属性,如果要追究和细分下去,能找出无数个属性出来。显然当我们进行某些类的设计时,首先需要定义其成员变量。成员变量对应于对象类的属性。成员变量的选择和确定的关键,看的该变量是否与实际问题的解决密切相关,该变量是否是解决问题所涉及的变量。
比如一个车辆排队系统,汽车的属性,显然需要:
- 到达时间;
- 优先级;
- …
而与颜色、车重,等等属性无关。
1. 从泛化到特殊
公共基类(比如公共事件基类,Event):规范所有事件类的形式,在其中实现几个所有事件都需要的公共操作,有时也需要定义一个什么都不做的成员方法。
派生类:只需要根据实际情况,把具体类(事件类)定义为基类的派生类,在不同派生类里根据实际情况定义基类中什么也未作的成员方法。
2. 动词做类
可封装的都可做类(所谓封装,针对的是成员属性和成员方法,封装了的成员变量,成员变量类内可见,可获取其值,也可对它的值进行修改,然后将对成员变量的相关操作封装进
比如以事件类(Event)作抽象基类,派生出来的到达类(Arrive),离开类(Leave),含义更像是动词,而不是通常面向对象编程中的“人”、“动物”、“水果”等等具有鲜明的对象、可封装特性的类别。
面向对象 —— 对类(class)的理解的更多相关文章
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python 面向对象之一 类与属性
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...
- 乐字节Java编程语言发展,面向对象和类
大家好,上次我们讲过了乐字节Java编程之方法.调用.重载.递归,接下来我们将会进入到Java封装的内容.Java编程语言发展,面向对象和类. 一.编程语言的发展 机器语言——直接由计算机的指令组成, ...
- 13_Python的面向对象编程-类class,对象object,实例instance
1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组 2.对象是由类实例化出来的一个具体的对象 属性: 对象拥有的名词,用变量表示 ...
- 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- Python如何设计面向对象的类(上)
Python是一门高级语言,支持面向对象设计,如何设计一个符合Python风格的面向对象的类,是一个比较复杂的问题,本文提供一个参考,表达一种思路,探究一层原理. 目标 期望实现的类具有以下基本行为: ...
- python-面向过程、面向对象、类
目录 python-面向过程.面向对象.类 面向过程编程 面向对象 类和对象 二者区别 定义格式: 定义类发生的事情 定义类的标准格式 属性的查找顺序 python-面向过程.面向对象.类 面向过程编 ...
随机推荐
- rescan-scsi-bus.sh linux扫盘 脚本
[root@ftp:/home/tools/shell] > yum install sg3_utils* Loaded plugins: fastestmirror Repository ba ...
- /lib64和/usr/lib64和/usr/local/lib64的区别
简单说,/lib64是内核级的,/usr/lib64是系统级的,/usr/local/lib64是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /u ...
- gRPC全局异常捕获
gRPC全局异常捕获 引 一般的.net项目比如ASP.NET.控制台程序.Windows服务.桌面程序等都会有framework自带的全局异常捕获机制.ASP.NET的ExceptionFilter ...
- __weak修饰符
前言 在 HAL 库中,很多回调函数前面使用__weak 修饰符. weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”. 加上了__weak ...
- Hive中建表注释为乱码的解决方式
Hive中建表注释为乱码的解决方式 可以查看http://www.cnblogs.com/stono/p/7813711.html进行手动修改: 如果要解决,在Ambari配置界面中,选择Hive,输 ...
- spring data redis jackson 配置,工具类
spring data redis 序列化有jdk .jackson.string 等几种类型,自带的jackson不熟悉怎么使用,于是用string类型序列化,把对象先用工具类转成string,代码 ...
- HDU 5399 Too Simple (2015年多校比赛第9场)
1.题目描写叙述:点击打开链接 2.解题思路:本题分情况讨论.比赛时候真是想的太简单了.以为就是(n!)^(cnt-1). 终于无限WA. 本题有几个特殊情况须要额外推断. 首先,假设输入的时候.有某 ...
- Metasploit学习笔记(博主推荐)
不多说,直接上干货! 连接后台的数据库,当然不是必须品. 连接数据库的好处:1.可以攻击和扫描的结果,保存起来 2.将一些搜索结果做个缓存 默认数据库是postgresql. 同时要注意的是 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(4)
8.4 提升性能 从一开始考虑pgbouncer的时候,性能就是一个关键的因素.为了确保高性能,有些问题必须认真对待.首先,确保参与您设置的所有节点相互之间的距离较近.这对于降低网络往返时间有很多的帮 ...
- Bayes++ Library入门学习之熟悉UKF相关类
UKF-SLAM是一种比较流行SLAM方案.相比EKF-SLAM,UKF利用unscented transform代替了EKF的线性化趋近,因而具有更高的精度.Bayes++库中的unsFlt.hpp ...