`

006 理解面想对象程序设计

 
阅读更多

Java SE 第八讲

 

1、面向对象程序设计(Object Oriented Programming,OOP;Object Oriented Design, OOD)。什么是面向对象?在面向对象程序设计中有两个重要的概念:类(class)与对象(object)。

 

2、类:类是一种抽象的概念,类中包含了数据(通常使用名词来表示,数据在类中称作属性【Property或Attribute】或者叫成员变量【Member variable】)与对数据的操纵(通常使用动词来表示,这种操纵在类中称作方法【method】)。比如说人就是一种抽象的概念,人具有姓名、年龄、身高等数据,还有吃饭、跑步等操纵数据的动作。

1)类所包含的内容:属性和方法。

2)如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的。 对于只用一个public类的源文件,main方法一定要放在这个类中;对于没有public类的源文件,main方法可以放在任意一个方法内。

 

3、对象:对象是一种具体的概念,是类的一种具体表示方式。比如说人是一个类,而张三、李四、王五等具体的人就是对象。

4、 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。生成一个对象的过程又叫做实例化。

5. 面向对象程序设计的三大基本特征:继承(Inheritence)、封装(Encapsulation)、多态(Polymorphism)

6. 命名约定

a) 类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都大写,中间不使用任何的连接符。比如Person类,MemberTest类。

b) 方法:首字母小写。如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的首字母大写。比如add,addThreeInt。

c) 属性:命名约定与方法相同。比如age,ageOfPerson。

 

 信息的隐蔽

 

 

面向对象的三大特征:封装、继承与多态。

 

只要某个编程语言是属于面向对象编程语言,它就必须具有这三个特征。Java也不例外。

 

下面我们会先来说说面向对象特征中的封装,但是在说它之前,还是先来说说信息的隐藏。这里,隐藏就像是封装的先锋官,没有了隐藏,封装就无从谈起。

 

我们已经知道了,Java中类和对象的概念,来自于我们的真实世界的抽象。那么我们在声明一个类,并根据类来创建对象的时候,就要估计它的真实合理性。

 

比如前面的学生类示例中,声明了age年龄属性。类型为整数类型。年龄是用来描述学生信息的。那么,如果运行其他的用户(比如其他的类或者对象)可以直接操作对象的属性,就会出现一些不必要的问题。

 

例如:将年龄(age)的值设置为1000。

 

虽然这在语法上是没有问题的,但是,我们知道,在现实世界中,这种情况是绝对不可能出现的。如果在程序的其它部分使用到了这个age,就可能会引起问题。

 

因此,一般而言,应该将属性定义为private(私有的)的,这样,只有类本身才可以访问这个属性,而外部程序或其他的类是不能访问它的(private的详细说明后面章节说明)。

 

通过定义不同的方法,并且将这些方法设置为public或Default来访问这些属性,这样,我们可以通过在方法中加入一些逻辑判断的方法来操作属性,例如,将年龄的上限设置为100,将下限设置为10等,这样就不会出现年龄为1000的情况了。一个改进后的Student类的定义如下(省略了其他属性和相应的方法):

 

 

public class Student1 {
	// 定义属性
	private int age;

	// 定义属性“age”的设置方法
	public void setAge(int s_age) {
		if (s_age > 100) {
			age = 100;
		} else if (s_age < 10) {
			age = 10;
		} else {
			age = s_age;
		}
	}

	// 定义属性“age”的获取方法
	public int getAge() {
		return age;
	}
}

 

这里先简单说明一下,在setAge方法中,if逻辑表示分支判断,很容易读出,当用户提供的参数年龄值大于100,则最多年龄可以记为100,如果小于10,则最小年龄可以记为10,如果年龄值在10到100的范围内,可以完成用户的赋值要求。

 

当然,这个逻辑可以根据实际情况来修改,这样一来,用户(其他的对象和类)就无法直接对年龄属性“胡作非为”了,他必须在我们的监督下完成操作。

 

这就是信息的隐藏。即将类中不想让其他用户直接操作的属性(或者方法,一般主要指属性)设置为private修饰,只允许在该类里面进行操作。

 

 

 

 

分享到:
评论

相关推荐

    GDI+图像程序设计(PDF & 源码 -电子工业出版社)

    本书是一本为.NET开发人员讲授如何编写Windows和Web图形应用程序的专著,书中全面介绍了GDI+和Windows图形程序设计的基本知识和GDI+图形程序设计的各个方面。 本书适合于开发GDI+图形应用程序的初、中级程序员...

    PHP100视频教程 17:PHP面向对象开发的学习(一).rar

    起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是, 这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方 面。如,面向对象的分析(OOA,Object Oriented ...

    C#GDI+图形程序设计源码

    15.1 设计交互式GUI应用程序 15.2 绘制具有形状的窗体和Windows控件 15.3 为绘制的图像添加版权信息 15.4 从流或数据库读取及写入图像 15.5 创建自绘制的列表控件 总结 附录A .NET中的异常处理

    C++与面向对象程序设计教程

    比较宽的知识面,并且能够时时补充自己的知识和完善自己的知识结构; 耐心好,特别是在调试和学习阶段; 代码是给人看的,而不是给机器运行的 懂得坚持自己的开发思路,并懂得理解与吸收别人的...

    《程序设计大学教程试读》PDF版

    1597.3 方法和属性 1607.3.1 什么是方法 1607.3.2 方法的绑定 1627.3.3 属性 1647.4 本章小结 1667.5 本章习题 167第8章 面向对象程序设计 1718.1 对象 1718.1.1 理解对象 1718.1.2 使用对象 1728.1.3 对象之间的...

    C++入门到精通

    阔的从最基本的C++ 程序设计到面向对象程序设计以及基于模板的程序设计面面俱到 而且讲解细致入微值得仔细品味 2 许多实际的范例程序纯粹的技术讲解总是非常枯燥的但是阅读本书并不感觉枯燥 因为作者在介绍每一...

    C语言程序设计标准教程

    由于采用了函数模块式的结构, C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。  在C语言中可从不同的角度对函数分类。 1. 从函数定义的角度看,函数可分为库函数和用户...

    精通DirectX.3D图形与动画程序设计.pdf

    中文名: 精通DirectX 3D图形与动画程序设计 原名: 精通DirectX 3D图形与动画程序设计 别名: 游戏编程, 游戏开发 作者: 王德才 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社书号: 9787115159717发行时间: 2007...

    新编C++习题与解析 3-4章

    本书将使学生充分掌握C++程序设计课程求解问题的技巧与方法,深化对基本概念的理解,切实提高面向对象的程序设计能力。 本书内容丰富,习题覆盖面广,不仅可以作为计算机专业本、专科C++语言程序设计课程的学习参考...

    Scala程序设计(第2版)

    第23章 应用程序设计 435 23.1 回顾之前的内容 435 23.2 注解 437 23.3 Trait即模块 441 23.4 设计模式 442 23.4.1 构造型模式 443 23.4.2 结构型模式 443 23.4.3 行为型模式 444 23.5 ...

    PHP 面向对象技术(全面讲解).txt

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程 架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP 达到了软件工程的三个目标:...

    java课程设计报告贪吃蛇游戏设计.doc

    本课程的程序设计专题实际是计算机相关专业 学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计 目的是加深对理论教学容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发 中...

    Java核心技术 卷Ⅰ:基础知识 【中文】(第八版)

    第4章介绍面向对象程序设计(Object-Oriented Programming, OOP)是当今程序设计的主 流,而Java 是完全面向对象的。本章将介绍面向对象两个基本成分中最重要的—封装,以及 Java 语言实现封装的机制,即类与方法。...

    java(j2ee)课程设计报告

    Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的...

    个人简历模板加求职信 望大家参考,分享个人成果

    其他专业课: 计算机网络与安全技术 计算机病毒及黑客防范技术 数字签名与认证技术 数据库SQL-server linux系统 操作系统与安全 电子商务安全技术 面型对象程序设计 防火墙技术及应用 计算机密码学 电子技术 等 ...

    python面向对象进阶之路

    众所周知,python是门面向对象编程语言,面向对象是一个程序设计和编程思想,即一切皆为对象。 面向对象 面向对象三要素:封装,继承, 多态 封装? 把一致的行为或者公共的部分封装成一个类或者方法。 比如把一定...

    绝对深层次IOC和AOP的理解

    AOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程 (OOP)。 AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象 的软件系统中,从而实现了横切...

    关于计算机数据库系统设计方案.doc

    1、关系数据库中的优势 面向对象是一种认识方法学,也是一种新的程序设计方法学。把面向对象的方法和数 据库技术结合起来可以使数据库系统的分析、设计最大程度地与人们对客观世界的认识 相一致。 面向对象技术利用...

Global site tag (gtag.js) - Google Analytics