第1章 类和对象—面向对象概念
面向对象程序设计(Object-Oriented Programming,OOP)是一种程序设计架构,同时也是一种程序开发的方法。对象指的是类的实例,它将对象作为程序的基本单元,将程序和数据封装其中,以提高代码的重用性、灵活性和扩展性。
1.1 面向对象概念
时间是由什么组成的?现实世界是由一个一个对象组成的,例如看到的东西、听到的事件、想到的事情,这些都是对象,也就是说万事万物皆对象。不同的对象,既相互独立,又相互联系,人们面向的世界是“面向对象”的。
1.1.1对象抽象成类
对象(Object)抽象为类(Class)的过程,是在系统分析阶段完成的。
1. 分析对象的特征
对象是人们要分析的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件,不同的对象呈现不同的特征。由于对象反映了现实世界,人们通过面向对象的方法就可以找到合理地解决问题的方法。怎么区分这些对象呢?就是分析与系统相关的特征,包括状态(静态特征)和操作(动态特征)。如图1-1所示为对象的部分特征的分析。
状态:用于描述对象的静态特征,表示对象“是什么样子”。对象的状态用一些数据来描述,在程序中称为字段或属性。
操作:用于描述对象的动态特征,表示对象“能做什么”。对象的操作用于改变对象的状态,对象的操作就是对象的行为,在程序称为方法或函数。
对象实现了状态和操作的结合,使状态和操作封装在一个对象之中,如图1-2所示。
2. 对象抽象成类
抽象就是从特定角度出发,从已经存在的事物中提取现实世界中某事物的关键特征,为该事物构建模型的过程。对同一事物在不同的需求下, 需要提取的特征可能不一样。得到的抽象模型中一般包含:状态(属性)和操作(方法或函数),这个抽象模型称为类。
现实世界中的事物都可以抽象成应用系统软件中的对象,提取出人们所关注的对象,对这些对象再分析与应用系统相关的特征,对不同特征的对象进行分类,把具有相同或相似的对象进行归类,即抽象成类,如图1-3所示。
例如,要研发一款学校管理系统软件,依据学校汇总的对象特征,分为人、场馆、物品、课程等类别。学校中的“人”,根据特征可分为管理人员、教师、后勤人员、学生等类别,这种“类别”在面向对象中称为“类”。类是具有相同状态和操作的一组对象的集合
类是对象的抽象,仅仅是模板,比如说“人”类。对类进行实例化得到对象,对象是一个一个看得见、摸得着的独一无二的具体实体,一个对象具有唯一的状态和操作,如图1-4所示。
面向对象技术利用“面向对象思想”去描述“面向对象的世界”。面向对象是把问题分解成各个对象,在系统分析阶段把这些对象抽象成不同的类,建立类和描述这类对象在解决问题时的特征(状态和操作),形成类模板。其中的操作,在类定义中是用方法来实现的
3. 课堂练习
【课堂练习1-1】指出下面词语哪些是类?哪些是对象?
笔记本电脑 院中的那辆白色轿车 员工 同事小李
汽车 大象 我家的小狗 越野车
我的手机 我选的本学期的课程 我选的C#课程 教师
【例1-1】 使用面向对象的思想描述并抽象出学生类。
功能描述:常用的学生信息有姓名、性别、年龄、班级等基本信息,学习完一门课程后需要参加考试,只有考试通过后才能进入下一门课的学习。请根据描述,从对象抽象出学生类。要求定义学生类,并在主方法中实例化学生对象。
思路分析如下。
1)分析问题:学生学习课程。
2)提炼对象:学生。
3)分析对象的状态:姓名、性别、年龄、班级等。
4)分析对象的操作:学习、考试等。
5)定义类:学生类Student。
状态:
姓名name
性别gender
年龄age
班级grade
操作:
显示学习的课程Study(course),course是显示的课程名称
显示考试的课程Exam(course,score),course课程,score成绩
【课堂练习1-2】请使用面向对象的思想描述并抽象出“台湾烧仙草奶茶连锁店”的类。
功能描述:不同的“台湾烧仙草奶茶连锁店”具有相同的环境、奶茶品种、价格、服务等,显示某编号奶茶店的信息。
【例1-2】 使用面向对象的思想描述长方体类。
功能描述:长方体有3条棱,分别叫作长方体的长,宽,高。用这3条棱既能描述一个长方体,也可以计算长方体的体积、表面积。
思路分析如下。
1) 分析问题:用长方体的3条棱就能描述一个长方体,计算长方体的体积、表面积。
2) 提炼对象:长方体。
3) 分析对象的状态:长,宽,高。
4) 分析对象的操作:计算长方体的体积、表面积。
5) 定义类:长方体类Cuboid。
状态:
长length
宽width
高height
操作:
计算长方体的体积Cubage,长方体的体积=长×宽×高计算长方体的表面积TotalArea,长方体的表面积=(长×宽+长×高+宽×高)×2
1.1.2 由类创建对象
在编程阶段,由类模板生成(或创建)对象(实例),如图1-5所示。
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型对象中的方法和变量的模板。例如,由“人”类创建“刘强”“王芳”对象,如图1-6所示。
类是具有相同状态(特征)和操作(方法或函数)的一组对象集合。类是对象的类型,不同于基本数据类型(例如,int类型),类具有操作。对象是一个能够看到、摸得着的具体实体。
1.1.3 对象之间的通信
对象之间的通信称为消息,如图1-7所示。在对象的操作中,当一个对象的消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接收消息的对象名、发送给该对象的消息名(即对象名、方法名)。
面向对象的思想就是以对象为中心,先开发类,然后实例化对象,通过对象之间相互通信实现功能。
1.1.4 面向对象开发的特点
面向对象开发就是采用“现实模拟”的方法设计和开发程序,面向对象是把问题分解成各个对象,描述这个对象再解决问题时的状态和操作,面向对象技术利用“面向对象的思想”去描述“面向对象的世界”。面向对象开发主要特点如下。
1) 虚拟世界和现实世界的一致性。
2) 客户与软件开发工程师交流更顺畅。
3) 软件开发人员内容交流更顺畅。
4) 代码重用性搞,可靠性高,开发效率高。
第1章 类和对象—面向对象概念相关推荐
- 第三章类与对象基础 ① 笔记
1. 内容回顾 1.1. 课前测试 1.2. 上节内容 2. 本章重点 2.1. 类和对象的概念 2.2. 类的基本组成 2.3. 构造方法 2.4. 成员方法 3. 具体内容 3.1. 类和对象的概 ...
- Java-入门之面向对象以及类和对象的概念(一)
面向对象,类,对象? 前言:只有光头才能变强! 一:面向对象 当我们初学java时,扑面而来的一个词就是面向对象,那什么是面向的对象呢 ? 在说面向对象之前,大家先要知道对象是什么,如果你脑子里第一想 ...
- 面向对象——类与对象的概念
● 类:类是一个模板,它描述一类对象的行为和状态. (1)什么是类?类是分类和类别的意思 通过分类,可以区别不同的事物种类, 类是一组具有共同特性(属性)与行为(方法)的事物集合 (2)类与对象之间 ...
- java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象
对象与类 一.面向对象思想的概述 1>面向对象与面向过程: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象. 面向对 ...
- Python程序开发——第六章 类与对象
目录 一.类 (一)类.对象 (二)类的定义 (三)对象的创建和使用 二.限制对象访问 (一)定义私有成员.方法 (二)访问私有成员.方法 三.构造方法和析构方法 (一)构造方法 (二)析构方法 四. ...
- java什么是类和对象,Java类和对象的概念
Java是一门面向对象的编程(Object Oriented Programming, OOP)语言,面向对象是相对于面向过程而言.那么什么是面向对象,什么又是面向过程呢? 面向过程--步骤化 面向过 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- 学习java要学类与对象的使用吗_java 类与对象 的概念理解(可以用我们学习多年的蚂蚁哲学套用)...
面向对象其实是一种思考的思想,是解决问题,架构工程的整体解决方案.二早期编程语言的思想是面向过程. 面向过程注重的是过程,过程所涉及的行为,也就是功能.通过选择循环语句等逻辑将参与者连接起来. 面向对 ...
- C++语言程序设计——知识点复盘(第四章 类与对象)
目录 面向对象程序设计的基本特点 1.抽象 2.封装 3.继承 4.多态 类和对象 类的成员函数 1.成员函数的实现 2.目的对象. 3.带默认形参值的成员函数 4.内联成员函数 构造函数 析构函数 ...
最新文章
- SummarizedExperiment类使用
- mysql sqlserver对比_很用心的写了 9 道 MySQL 面试题
- win docker运行nginx
- Windows-Qt-EclipseCDT 环境问题集
- oom 如何避免 高并发_【面试】如何避免OOM的发生
- 容器编排技术 -- Kubernetes kubectl rollout pause 命令详解
- 深入理解SQL Server的规划和安装
- git问题ERROR: Repository not found.的解决办法
- [Python] np.ones_like(ndarray)和np.zeros_like(ndarray)
- 自动垃圾回收学习笔记-垃圾回收算法
- 多重判断php d代码,phpd代码审计
- mysql 判断指定条件数据存不存在,不存在则插入
- 左神进阶班-KMP算法
- 国外十大在线支付服务网站
- React Native从入门到实战--开发环境搭建
- JAVA Date 工具类 常用
- 升级Windows11后鼠标卡顿
- 王思聪他们家到底是干什么的
- bootstrap侧面菜单栏
- 代码记录丨小青蛙和汉诺塔
热门文章
- Jmeter做接口的压力测试
- 一用就上瘾的智能手环 荣耀手环6使用感受
- 【矩阵论笔记】内积空间定义、长度、Cauchy-Schwartz、三角不等式
- 人力资源管理专业知识与实务(初级)【3】
- linux分区_解决Linux下挂载的NTFS分区(Windows分区)只读问题。
- 华为鸿蒙能行吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
- 荒野行动服务器信息连不上,荒野行动服务器连接不上怎么办_荒野行动服务器连接不上解决方法说明_3DM手游...
- 【每日一P】魔幻森林-美女与野兽场景合成教程
- Nginx 连接 Redis 实现数据库操作
- 视频号新手如何打造爆款内容?