面向对象 —— 对类(class)的理解
类是成员变量和成员函数的封装,封装的一个重要功能就是可见性(继承除外,当然继承是面向对象的另外一个重要特性),所谓可见性,类内可见,类外不可见。可见性保证了类型安全(type-safe)
对类进行实例化(调用类的构造函数),获取类的对象,单是从类和对象的分别的命名上,也能体会类与对象的区别,类一般是抽象名词(Host),对象则是具体名词(Customs)。
0. 成员变量的选择
一个对象类,当然不只有限的属性,如果要追究和细分下去,能找出无数个属性出来。显然当我们进行某些类的设计时,首先需要定义其成员变量。成员变量对应于对象类的属性。成员变量的选择和确定的关键,看的该变量是否与实际问题的解决密切相关,该变量是否是解决问题所涉及的变量。
比如一个车辆排队系统,汽车的属性,显然需要:
- 到达时间;
- 优先级;
- …
而与颜色、车重,等等属性无关。
1. 从泛化到特殊
公共基类(比如公共事件基类,Event):规范所有事件类的形式,在其中实现几个所有事件都需要的公共操作,有时也需要定义一个什么都不做的成员方法。
派生类:只需要根据实际情况,把具体类(事件类)定义为基类的派生类,在不同派生类里根据实际情况定义基类中什么也未作的成员方法。
2. 动词做类
可封装的都可做类(所谓封装,针对的是成员属性和成员方法,封装了的成员变量,成员变量类内可见,可获取其值,也可对它的值进行修改,然后将对成员变量的相关操作封装进
比如以事件类(Event)作抽象基类,派生出来的到达类(Arrive),离开类(Leave),含义更像是动词,而不是通常面向对象编程中的“人”、“动物”、“水果”等等具有鲜明的对象、可封装特性的类别。
面向对象 —— 对类(class)的理解相关推荐
- 面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维
1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类. 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述 ...
- Java 面向对象:super关键字的理解
Java 面向对象:super关键字的理解 一.Super关键字: 1. super调用父类的构造方法,必须在构造方法的第一个 2. super只能出现在子类的方法或构造方法中! 3. super和t ...
- Golang面向对象之-类
Golang支持面向对象编程,支持基本的继承,封装,接口等基本概念,也很容易实现,但是Golang是一种松散的面向对象,约束远没有java,c++那么严格,Golang 可以用结构体来模拟类,并给结构 ...
- Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
Python 面向对象:类的创建及其基本内置方法的使用 首先了解一下什么是面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ...
- Python面向对象编程——类的学习
面向对象编程 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向 ...
- Java—面向对象设计—类和对象
理解面向对象程序设计 面向对象程序(Object-oriented programming,OOP)设计是继面向过程又一具有里程碑意义的编程思想,是现实世界模型的自然延伸.下面从结构化程序设计说起,逐 ...
- Java基础学习第十三讲:Java面向对象---嵌套类
Java面向对象-嵌套类.内部类.匿名类 一.static静态 在<Java编程思想>有这样一段话: "static方法就是没有this的方法.在static方法内部不能调用非静 ...
- Java-入门之面向对象以及类和对象的概念(一)
面向对象,类,对象? 前言:只有光头才能变强! 一:面向对象 当我们初学java时,扑面而来的一个词就是面向对象,那什么是面向的对象呢 ? 在说面向对象之前,大家先要知道对象是什么,如果你脑子里第一想 ...
- 谈谈对面向对象、类、对象的了解
谈谈对面向对象.类.对象的了解 面向对象 强调具备了功能的对象,以类 / 对象为最小单位,考虑让谁来做. 面向对象编程语言中都有类的概念,代码的组织靠类(代码的最小组织单位是类),面向对象编程中执行一 ...
- php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例
本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...
最新文章
- wfs.js windows用法
- 图像处理中的拉普拉斯算子
- VTK:图片之Transparency
- winphone8更换帐号问题的几点说明
- Python进行特征提取
- 51nod1433--简单数学
- IT人的地摊不就是开源么 | 凌云时刻
- Telegram支持删除双方设备中的聊天记录
- 网络空间安全现状与国家战略
- OPENG 获取状态的一些枚举值
- Jenkins杀掉子进程解决方法(转载)
- 教务管理系统:成绩、课表查询接口设计及抢课、监控功能实现
- mysql binlog提取sql_导出mysqlbinlog语句
- dispatch(dispatched)
- php ajax 考试倒计时,基于Ajax技术实现考试倒计时并自动提交试卷
- 一款模拟养成类游戏的策划大纲
- Homework 1 : Knowledge items of C++ Answer (part 1)
- python儿童编程例子代码-python儿童编程
- [C语言]累加器----PTA
- 智能卡应用的开发流程
热门文章
- python 括号 垃圾_Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
- Linux系统下修改主机名(CentOS7)
- Oracle iops升高查看,一则简单的磁盘的iops测试
- 矩阵维度必须一致是什么意思_糖化肌肤是什么意思?抗糖养肤你必须知道这些...
- css 倒三角_改善CSS的10种最佳做法,帮助你从样式中获得最大的收益。
- Mysql中导入和导出数据库
- Redis教程:基础知识
- Matlab编程与C编程的不同
- php fopen 清空文件内容,如何在c语言中清空文件里的内容?
- java技术指标_使用 Micrometer 记录 Java 应用性能指标