抽象、封装与类(一)

抽象、封装与类(一)
抽象、封装与类(一)

抽象、封装与类(一)

学生姓名:学号:专业班级:

实验类型:□验证□综合□设计□创新实验日期:实验成绩:

一、实验项目名称

抽象、封装与类(一)

二、实验目的

1、熟练掌握如何自定义一个类。

2、熟练掌握如何定义构造函数,如何创建对象。

三、实验基本原理

在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。

过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包括了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。

封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。封装使得抽象数据类型对内成为一个结构完整,可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的右击的单元。

Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。

类库是JAVA语言的重要组成部分。JAVA语言由语法规则和类库两部分组成,语法规则确定JAVA程序的书写规范;类库(或称为运行时库)则提供了JAVA 程序与运行它的系统软件(JAVA虚拟机)之间的接口。

创建对象:首先说明新建对象所属的类名,然后说明新建对象的名字,赋值号右边的NEW是为新建对象开辟内存空间的算符。

构造函数是与类同名的方法。

四、主要仪器设备及耗材

计算机一台、my Eclipse软件

五、实验步骤

(1)打开My Eclipse,新建工程和类。分别输入本实验的代码。

(2)按照需求,输入如下代码:

P95~96:4-7、4-8、4-9(综合)

模仿例4-2,编写如下程序。

定义一个表示学生的类Student,包括属性“学号”、“班号”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班号”、“获得姓名”、“获得性别”、“获得年龄”、“修改年龄”。

为Student类定义构造函数初始化所有属性,增加一个方法public String toString(),把Student类对象的所有属性信息组合成一个字符串输出。

在main()中创建Student类对象,测试自定义类。

4-7:

class Student

{

private String studentId;

private int classId;

private String studentName;

private char studentGender;

private int studentAge;

String getStudentId()

{

return studentId;

}

int getClassId()

{

return classId;

}

char getStudentGender()

{

return studentGender;

}

String getStudentName()

{

return studentName;

}

int getStudentAge()

{

return studentAge;

}

boolean setStudentAge(int newAge)

{

if (newAge>0&&newAge<130)

{

studentAge=newAge;

return true;

}

else

{

System.out.print("非法学生年龄!");

return false;

}

}

}

4-8

package Exercise;

public class exercise {

public static void main(String[] args) { {

Student demoStudent=new Student();

}

}

class Student

{

private String studentId;

private int classId;

private String studentName;

private char studentGender;

private int studentAge;

String getStudentId()

{

return studentId;

}

int getClassId()

{

return classId;

}

char getStudentGender()

{

return studentGender;

}

String getStudentName()

{

return studentName;

}

int getStudentAge()

{

return studentAge;

}

boolean setStudentAge(int newAge)

{

if (newAge>0&&newAge<130)

{

studentAge=newAge;

return true;

}

else

{

System.out.print("非法学生年龄!");

return false;

}

}

}

}

}

4-9

package Exercise;

public class exercise

{

public static void main(String[] args)

{

Student demoStudent=new Student("6100511014",111,"f","邓丽云",21);

System.out.println(demoStudent.toString());

}

}

class Student

{

private String studentId;

private int classId;

private String studentName;

private char studentGender;

private int studentAge;

private char gender;

String getStudentId()

{

return studentId;

}

int getClassId()

{

return classId;

}

char getStudentGender()

{

return studentGender;

}

String getStudentName()

{

return studentName;

}

int getStudentAge()

{

return studentAge;

}

boolean setStudentAge(int newAge)

{

if (newAge>0&&newAge<130)

{

studentAge=newAge;

return true;

}

else

{

System.out.print("非法学生年龄!");

return false;

}

}

public Student(String id, int clsId, String string, String name, int age) {

studentId=new String(id);

classId=clsId;

studentName=new String(name);

studentAge=age;

studentGender=gender;

}

public String toString()

{

return"学生信息:\n"

+"学号"+this.getStudentId()

+"\t班号"+this.getClassId()

+"\t姓名 "+this.getStudentName()

+"\t性别"+((this.getStudentGender())=='m'?"男 ":"女")

+"\t年龄"+this.getStudentAge();

}

六、实验数据及处理结果

七、思考讨论题或体会或对改进实验的建议

代码中的“get”和“set”函数可以直接使用工具创建。

八、参考资料

《Java语言与面向对象程序设计》清华大学出版社

《Java语言与面向对象程序设计题解及实验指导》清华大学出版社

作业5 抽象与封装三

作业五抽象与封装三 确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“绿色”标出错误的地方,并在每个练习的空白处写下正确的代码。如果代码中没有错误,则在答案中写上“没有错误”。注意:在每个程序段中可能包含多处错误。 问题1 、以下代码定义了Product类,它有一个不带参数的构造方法,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的String import java.text.*; public class Product{ private String name; private double price; private static DecimalFormat money=new DecimalFormat("$0.00"); public Product() { name=" "; price=0.00; } Public String toProductString() { return name+" costs "+money.format(price); } }//end class Product 答案:没有错误 问题2 、如下代码定义了Product类的另一个构造方法,它有2个参数,并将这些参数赋给相应的实例变量 public Product(String name, double price) { name= name; price=price; } 答案: https://www.360docs.net/doc/2a16707612.html,= name; this.price=price; 若类的构造方法中的参数与类的实例变量命名为相同的名称,在成员方法中引用的变量名为局部变量,若想引用视力变量就要加上this 问题3、如下代码定义了两个set方法,用于设置Product类的name和price

第6章_抽象、封装与类

第六章抽象、封装与类主要内容 ?一、抽象与封装 二、J a v a的类 三、对象的创建与使用 四、参数传递 五、匿名对象 1、抽象 抽象内涵 去除掉对象中与主旨无关的次要部 分,或是暂时不予考虑的部分 抽取出与研究工作有关的实质性的 内容加以考察 软件开发方法中所使用的抽象类型 (1)过程抽象 (2)数据抽象

(1)过程抽象 将整个系统功能划分为若干部分,强调功能完成的过程和步骤 面向过程的软件开发方法采用的就 是这种抽象方法 使用过程抽象有利于控制、降低整个 程序的复杂度 缺点:这种方法本身自由度较大,难 于规范化和标准化,操作起来有一定 难度,在质量上不易保证 (2)数据抽象 2、封装 利用抽象数据类型将数据和操作封装在一起 数据被保护在抽象数据类型的内部 系统其他部分只能通过被授权操作 与抽象数据交互 在面向对象程序设计中 抽象数据类型通过“类”来代表

每个类都封装相关的数据和操作 在实际开发过程中 类常用来构建系统内部的模块 ?封装特性把类内的数据保护得很严密, 模块与模块间仅通过严格控制的界面进 行交互 ?使它们之间耦合和交叉大大减少,从而 降低了开发过程的复杂性,提高了效率 和质量,减少了可能的错误 保证程序中数据的完整性和安全性主要内容 一、抽象与封装 ?二、J a v a的类 三、对象的创建与使用 四、参数传递 五、匿名对象 二.J a v a的类 ?1.J a v a类概念

2.类的定义与修饰 3.域 4.方法 1、J a v a类概念 类(C l a s s)和对象(O b j e c t)是面向对象程序设计方法中最核心的概念。 类是对某一类事物的描述(共性),是 抽象的、概念上的定义; 对象则是实际存在的属该类事物的 具体的个体(个性),因而也称为实 例(I n s t a n c e)。 1、J a v a类概念 类是J a v a程序的基本组成要素 封装了一类对象的状态和方法,是该 类对象的原型 J a v a程序设计就是定义类的过程

面向对象及封装

面向对象抽象及封装 主讲:钟起杭 面向过程:面向过程关注的是一个具体的流程,考虑它是如何实现,关心的是功能的实现。面向对象:把客观的可见的事物都当做是一个对象(万事万物皆对象),面向对象设计思想在考虑问题时,以具体的事物(对象)为单位,考虑它的属性(特征)及动作(方法),关注的是整体,这符合我们解决问题的一般思路—>因人而异,因时而异都在面向对象编程思想中体现,这也使得面向对象编程更加容易,因为这种思想更加贴近我们的日程生活。 面向对象的特点: 抽象:万事万物皆对象,那么对于具有一定相同属性的事物可以归类于一个集合,对这类食物的简单外观或者动作的描述(抽象)- 产生了类。那么对事物的具体描述就能产生具有这类共同属性的对象。 封装:什么是封装?封装就是将对象具有的一些属性和方法通过封装打包到一起,共同体现一个事物的特征。为什么要封装?因为对象也是隐私的,没有人希望外界能知道自己的隐私,所以为了确保对象(爱人)在外界的良好形象就要保护好对象的隐私(对于人来说),那么对于程序来说,让别人知道的隐私越少,暴露出来的bug也能越少。当然隐私有时候也不是绝对的,比如有些事情对于家人就不算隐私,对同事,同学就完全算是隐私(身体上的特征),所以java语言就有不同的访问修饰符来适应这些不同的情况。 访问修饰符: public:公共的,可以理解为一个人的外貌特征,是谁都能看到的了解的。 protected:对于家庭是非隐私的,对于外界却是隐私的 default:在某一人群中不是秘密,对于陌生人来说就算是隐私了(只能在本包中能看到,跨包了就没办法看到的。) private:完全的隐私,除了自己别人都不能知道的。

抽象、封装与类(一)

抽象、封装与类(一) 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 抽象、封装与类(一) 二、实验目的 1、熟练掌握如何自定义一个类。 2、熟练掌握如何定义构造函数,如何创建对象。 三、实验基本原理 在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包括了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。 封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。封装使得抽象数据类型对内成为一个结构完整,可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的右击的单元。 Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。 类库是JAVA语言的重要组成部分。JAVA语言由语法规则和类库两部分组成,语法规则确定JAVA程序的书写规范;类库(或称为运行时库)则提供了JAVA 程序与运行它的系统软件(JAVA虚拟机)之间的接口。 创建对象:首先说明新建对象所属的类名,然后说明新建对象的名字,赋值号右边的NEW是为新建对象开辟内存空间的算符。 构造函数是与类同名的方法。 四、主要仪器设备及耗材 计算机一台、my Eclipse软件 五、实验步骤 (1)打开My Eclipse,新建工程和类。分别输入本实验的代码。 (2)按照需求,输入如下代码: P95~96:4-7、4-8、4-9(综合) 模仿例4-2,编写如下程序。 定义一个表示学生的类Student,包括属性“学号”、“班号”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班号”、“获得姓名”、“获得性别”、“获得年龄”、“修改年龄”。 为Student类定义构造函数初始化所有属性,增加一个方法public String toString(),把Student类对象的所有属性信息组合成一个字符串输出。 在main()中创建Student类对象,测试自定义类。

抽象工厂模式abstractfactory

抽象工厂模式 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具·体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 模型图 逻辑模型: 物理模型: 生活中的例子 抽象工厂的目的是要提供一个创建一系列相关或相互依赖对象的接口,而不需要指定它们具体的类。这种模式可以汽车制造厂所使用的金属冲压设备中找到。这种冲压设备可以制造汽车车身部件。同样的机械用于冲压不同的车型的右边车门、左边车门、右前挡泥板、左前挡泥板和引擎罩等等。通过使用转轮来改变冲压盘,这个机械产生的具体类可以在三分钟内改变。 抽象工厂之新解 虚拟案例 中国企业需要一项简单的财务计算:每月月底,财务人员要计算员工的工资。 员工的工资 = (基本工资 + 奖金 - 个人所得税)。这是一个放之四海皆准的运算法则。

为了简化系统,我们假设员工基本工资总是4000美金。 中国企业奖金和个人所得税的计算规则是: 奖金 = 基本工资(4000) * 10% 个人所得税 = (基本工资 + 奖金) * 40% 我们现在要为此构建一个软件系统(代号叫Softo),满足中国企业的需求。 案例分析 奖金(Bonus)、个人所得税(Tax)的计算是Softo系统的业务规则(Service)。 工资的计算(Calculator)则调用业务规则(Service)来计算员工的实际工资。 工资的计算作为业务规则的前端(或者客户端Client)将提供给最终使用该系统的用户(财务人员)使用。 针对中国企业为系统建模 根据上面的分析,为Softo系统建模如下: 代码: 针对美国企业为系统建模 为了拓展国际市场,我们要把该系统移植给美国公司使用。 美国企业的工资计算同样是: 员工的工资 = 基本工资 + 奖金 - 个人所得税。 但是他们的奖金和个人所得税的计算规则不同于中国企业: 美国企业奖金和个人所得税的计算规则是:

封装,继承,多态,抽象,接口

1.1封装 封装是面向对象编程的三大特征之一。封装就是将通过抽象得到的属性和方法相结合,形成一个有机的整体——“类”。封装的目的是增强数据安全性和简化编程,使用者不必了解具体的实现细节,所有对数据的访问和操作都必须通过特定的方法,否则便无法使用,从而达到数据隐藏的目的。 封装是面向对象编程语言对客观世界的模拟,客观世界的属性都是被隐藏在对象内部的,外界不能直接进行操作或者修改。譬如:常见的空调电视机等对象,这些对象都是封装好的,普通人只可以通过对小小的按钮操作来控制这些家电;不可以随意打开设备进行修改对象内容的配置。但是专业人员可以修改这些家电,而我们就是要做这些“专家”;如下图所示。 操作按钮 操作按钮 图1.1.1 封装对象 1.1.1为什么需要封装 通过第一阶段的学习,我们知道类由属性和方法组成,在类的外部通过本类的实例化对象可以自由访问和设置类中的属性信息,这样不利于属性信息的安全,示例1.1就是如此。示例1.1 public class Person { public String name; public int age; public void sayHello(){ System.out.print("你好!"); } } public class Test { public static void main(String[] args) { Person p=new Person(); https://www.360docs.net/doc/2a16707612.html,="皇帝"; p.age=1000;//属性信息可以直接设置 p.sayHello();

} } 上述代码在第一阶段Java的课程中经常见到,大致一看没什么问题,但是仔细分析过之后会发现:把年龄设置成1000合理吗? 由于Person类的属性都是公有的(public),那也就意味着在Person类的外部,通过Person类的实例化对象可以对这些公有属性任意修改,这就使得我们无法对类的属性进行有效的保护和控制。这属于设计上的缺陷,那能不能避免这种情况呢?这就需要用到下面的封装了。 1.1.2现实生活中的封装 现实生活中封装的例子随处可见,例如药店里出售的胶囊类药品,我们只需要知道这个胶囊有什么疗效,怎么服用就行了,根本不用关心也不可能去操作胶囊的药物成分和生产工艺。再例如家家户户都用的电视机,我们只需要知道电视机能收看电视节目,知道怎么使用就行了,不用关心也不可能去搞清楚电视机内部都有哪些硬件以及是如何组装的。这些都是现实生活中封装的例子。 在刚才的两个例子中,我们可以认为药物成分是胶囊的属性,但是用户不需要也不可能去操作它。我们也可以认为内部硬件是电视机的属性,但是用户也不需要去操作它。这就是现实生活中封装的特征,程序中的封装与此类似。 1.1.3程序中的封装 封装就是:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。简而言之,封装就是将类的属性私有化,并提供公有方法访问私有属性的机制,我们看示例1.2。 示例1.2 public class Person{ //将属性使用private修饰,从而隐藏起来 private String name; private int age; public void sayHello() { System.out.print("你好!"); } } public class Test { public static void main(String[] args) { Person p=new Person(); https://www.360docs.net/doc/2a16707612.html,="杰克"; //编译报错 p.age=1000; //编译报错 p.sayHello(); } }

实验7 抽象与封装综合应用

实验7 抽象与封装综合应用 抽象与封装综合应用 课程名称:面向对象程序设计实验 实验项目名称:实验7 抽象与封装综合应用 【实验目的】 1. 掌握高精度数值类BigInteger类的成员变量和方法的应用 2. 掌握Calendar、Date类在时间表示上的应用 3. 掌握类之间的主要关系:一般关联、聚集关联中的组合、分享关联;理解类关系中“整 体-部分”这个重要关联关系的设计策略与Java代码实现方法 【实验步骤】 1、编程实现:大整数的数值计算。编写一个Java应用程序,计算两个大整数的和、差、积和商,并计算一个大整数的因子个数。(部分源码参考讲义) import java.math.*; public class BigIntegerExample { public static void main(String args[]) { BigInteger n1=new BigInteger("987654321987654321987654321"), n2=new BigInteger("123456789123456789123456789"), result=null; //n1和n2做加法运算 result = 【代码1】,; //打印输出求和结果 System.out.print(" "+【代码2】 ); System.out.println("和:"+result.toString()); result = 【代码3】//n1和n2做减法运算 System.out.println("差:"+result.toString()); result = 【代码4】//n1和n2做乘法运算 System.out.println("积:"+result.toString()); result = 【代码5】//n1和n2做除法运算 System.out.println("商:"+result.toString()); BigInteger m = new BigInteger("1968957"),

实验6 抽象与封装-3

实验6 抽象与封装-3 抽象与封装-3 课程名称:面向对象程序设计实验 实验项目名称:实验6 抽象与封装-3 学生姓名:专业:学号: 实验地点:实验日期:年月日 【实验目的】 1. 掌握Array 类的使用方式 2. 掌握String类和StringBuffer类的使用方式 3. 掌握Math类,掌握静态成员的使用方式 4. 掌握Calendar、Date类在时间表示上的应用 5.了解Integer类、Double类、Character类 6.熟悉重要JAVA API中类的成员变量和方法的应用。 【实验步骤】 1、编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按照字典顺序比较两个字符串的大小关系,检索字符串,创建子字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。 public class StringExample { p ublic static void main(String args[]) { String s1=new String("you are a student"); String s2=new String("how are you"); if(【代码1】) // 使用equals方法判断s1与s2是否相同 { System.out.println("s1与s2相同"); } else { System.out.println("s1与s2不相同");

} String s3=new String("22030219851022024"); if(【代码2】) //判断s3的前缀是否是"220302"。 { System.out.println("吉林省的身份证"); } String s4=new String("你"), s5=new String("我"); if(【代码3】)//按着字典序s4大于s5的表达式。 { System.out.println("按字典序s4大于s5"); } else { System.out.println("按字典序s4小于s5"); } int position=0; String path="c:\\java\\jsp\\A.java"; position=【代码4】; //获取path中最后出现目录分隔符号的位置 System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位 置:"+position); String fileName=【代码5】;//获取path中"A.java"子字符串。 System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName); String s6=new String("100"), s7=new String("123.678"); int n1=【代码6】; //将s6转化成int型数据。 double n2=【代码7】; //将s7转化成double型数据。 double m=n1+n2; System.out.println(m); String s8=【代码8】; //String调用valuOf(int n)方法将m转化为字符串对象 position=s8.indexOf("."); String temp=s8.substring(position+1); System.out.println("数字"+m+"有"+temp.length()+"位小数") ; String s9=new String("ABCDEF"); char[] a=【代码9】; //将s9存放到数组a中。 【代码10】//采用for循环,输出a数组的各个字符。 } } (1)【代码1】 s1.equals(s2) (2)【代码2】 s3.startsWith("220302") (3)【代码3】 https://www.360docs.net/doc/2a16707612.html,pareTo(s5) > 0

类的封装与继承习题(题)

1.以下关于继承的叙述正确的是( C )。 A、在Java中类只允许单一继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口只允许单一继承 2.有继承关系时用到的关键字是(A )。( 2 分) A:extend B:extends C:implements D:implement 3:Java变量中,以下不属于复合类型的数据类型是( D)。( 2 分) A:类 B:字符型 C:数组型 D:接口 4:java中定义数组名为abc,下面(B )可以得到数组元素的个数。( 2 分) A:abc.length( ) B:abc.length C:len(abc) D:ubound(abc) 5:下列说法正确的是(A )。( 2 分) A:编译后的Java源程序根据文件中定义的类和接口的个数产生相应个数的.class 字节码文件。 B:Java语言的源文件中不是任何地方都可以加注释的。 C:一个文件中可以有多个访问权限为public的类。 D:含有main()方法的类可以为public的类,也可以为其他类。 6:在调用构造函数时(C )( 2 分) A:子类可以不加定义就使用父类的所有构造函数 B:不管类中是否定义了何种构造函数,创建对象时都可以使用默认构造函数C:先调用父类的构造函数 D:先调用形参多的构造函数 7:Java与C/C++比较说法错误的是(D)。( 2 分) A:Java不提供goto语句,所以也就没指定goto作为关键字。

B:Java没有指针。 C:Java没有联合和结构 D:Java只有单继承没有多重继承。 8:若需要定义一个类域或类方法,应使用( B)修饰符。( 2 分) A:static B:package C:private D:public 9:下列说法( C)是正确的。( 2 分) A:程序执行到break语句是一定会结束所有的循环 B:程序执行到continue语句时会结束当前循环 C:break语句和continue语句都可以和标签协同使用 D:continue语句和break语句的作用相同 10:以下说法正确的是(D )。( 2 分) A:每个Java类都至少有一个构造方法,如果没有则机器自动生成一个默认的构造方法。 B:如果类里定义了一个或多个构造方法,那么java也提供默认的构造方法 C:每个Java类中用户必须定义至少一个构造方法。 D:以上都不对 11:对封装的理解正确的是(A )。( 3 分) A:封装就是把对象的属性和行为结合成一个独立的单位。 B:封装就是把对象完全隐蔽起来,不让外界访问。 C:封装性是一个使用问题。 D:封装和抽象是一回事。 12:对成员的访问控制保护最强的是(C )。( 3 分) A:public B:缺省 C:private D:protected

2.抽象和封装

抽象和封装 0.英语单词 1.抽象 我们需要设计一个电子宠物系统,其中领养宠物功能的详细需求如下: 根据控制台提示,输入领养宠物的昵称; 根据控制台提示,输入领养宠物的类型,有两种选择:狗狗和企鹅; 如果选择狗狗,要选择狗狗的品种,有两种选择:?聪明的拉布拉多犬?或?中华田园犬?如果选择类型,选择企鹅的性别:?Q仔?或?Q妹?。 所领养宠物的健康值默认是100,表示非常健康。 所领养的宠物和主人的亲密度是0,表示和主人不熟。 在控制台打印宠物信息,包括昵称、健康值、亲密度、品种或性别,表示领养成功。 领养成功后主人可以和狗狗玩接飞盘的游戏,也可以让狗狗看家;如果领养的是企鹅,主人可以和企鹅一起游泳,也可以和企鹅玩过家家的游戏。 根据上面的描述,进行分析和设计,找出类,设计类;并画出类图! 分析: 1)先找简单名词 2)再找修饰性名词 3)然后找动词 4)优化 类图 抽象时遵循的原则: 属性、方法的设臵是为了解决业务问题的;

关注主要属性、方法; 如果没有必要、勿增加额外的类、属性和方法。 2.类的定义 生活中描述事物无非就是描述事物的属性和行为,如人有身高、体重等属性,有说话、打球等行为。 Java中用类(class)来描述事物也是如此,属性:对应类中的成员变量,行为对应类中的成员函数。 定义类其实就是定义类的成员:成员变量和成员函数。 实例Dog.java Penguin.java 3.成员变量和局部变量的区别: 成员变量定义在类中,在整个类中都可以被访问; 成员变量随着对象的创建而建立,存在于对象所在的堆内存中; 成员变量都有默认初始值。 局部变量定义在局部范围内(方法内、语句或语句块内); 局部变量存在于栈内存中,局部变量只在所在的范围内有效,超出作用范围,变量所占内存就会被释放; 局部变量没有默认值,必须初始化。 实例: 成员变量的初始值 引用数据类型null 基本数据类型 byte short int long 0 float double 0.0 char ‘’ boolean false 4.创建和使用对象 1)创建对象的语句Dog dog = new Dog(); Penguin penguin = new Penguin(); 2)对象的内存结构 3)调用属性对象名.属性名 4)调用方法对象名.方法名 实例:Test.java 5.使用final定义常量 实例:Dog.java和Penguin.java的改进

java面向对象编程类的封装接口和基本类库练习题

面向对象编程基本知识练习 一、判断题 1.不需要定义类,就能创建对象。() 2.构造方法用于给类的private 实例变量赋值。() 3.对象一经声明就可以立即使用。() 4.在定义变量和方法时,必须清楚地在其面前标上访问权限修饰符。() 5.Java 程序中的参数传递都是把参数值传递给方法定义中的参数。() 6.在类定义中,成员访问权限修饰符不能多次出现。() 7.new 操作符动态地为对象按其指定的类型分配内存,并返回该类型的一个引用。() 8.类的方法通常设为public,而类的实例变量一般也设为public。() 9.构造方法在创建对象时被调用。() 10.通过点运算符与类对象的引用相连,可以访问此类的成员。() 11.声明为protected 的类成员只能被此类中的方法访问。() 12.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间。() 13.类的成员变量可以放在类体的任意位置。() 14.声明为protected 的类成员可以被此类作用域中的任何对象访问。() 15.没有返回值的方法可以用void 来表示,也可以不加。() 二、选择题 1. 下面对对象概念描述错误的是:( ) A 操作是对象的动态属性 B 任何对象都必须有继承性 C 对象间的通讯靠消息传递 D 对象是属性和方法的封装体 2.编译并运行下面的程序,运行结果为:( ) public class A { public static void main(String[] args) { A a=new A(); a.method(8); } void method(int i) { System.out.println(“int:“+i); } void method(long i) { System.out.println(“long:“+i); } } A 程序可以编译运行,输出结果为int:8 B 程序可以编译运行,输出结果为long:8

抽象、封装与类(二)

抽象、封装与类(二) 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 抽象、封装与类(二) 二、实验目的 1、熟练掌握属性的定义和静态属性、最终属性的使用。 2、熟练掌握方法的定义和静态方法、抽象方法、最终方法的使用。 三、实验基本原理 在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包括了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。 封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。封装使得抽象数据类型对内成为一个结构完整,可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的右击的单元。 Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。 类库是Java语言的重要组成部分。Java语言由语法规则和类库两部分组成,语法规则确定Java 程序的书写规范;类库,或称为运行时库,则提供了Java程序与运行的系统软件(JVM)之间的接口。系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。用户程序定义自己的类有定义类头和定义类体两个步骤,其中类体又由属性(域)和方法组成。 四、主要仪器设备及耗材 计算机一台、my Eclipse软件 五、实验步骤 (1)打开My Eclipse,新建工程和类。分别输入本实验的代码。 (2)按照实验的需求,输入如下代码: 编写一程序,完成以下工作: 定义一个圆类Circle,成员变量有最终静态属性圆周率PI、半径radius,成员方法有自定义构造方法、获取半径getRadius()、修改半径updateRadius()、计算面积area() 。 再定义一个圆锥类Taper,成员变量有底bottom、高height,成员方法有自定义构造方法、获得底圆半径getBottomR()、修改底圆半径updateBottomR()、获得高getHeight()、修改高updateHeight()、计算体积volume()。 最后写一测试类,测试自定义圆类Circle、圆锥类Taper是否正确。 1、定义圆类Circle class Circle { static final double pi=3.1415926; private double radius;

面向过程、面向对象、类、方法、事件、封装通俗理解

类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。 类描述了一组有相同特性(属性)和相同行为(方法)的对象。上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,不要被概念的东西搞晕了,给你举个例子吧,如果你去中关村想买几台组装的PC 机,到了那里你第一步要干什么,是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想象成是类,它就是一张纸,但是它上面记录了你要买的PC 机的信息,如果用这个配置单买10 台机器,那么这10 台机子,都是按这个配置单组成的,所以说这10 机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,用这个配置单配置出来(实例化出来)的机子就是对象,是我们可以操作的实体,10 台机子,10 个对象。每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会影响其它9 台机器,但是我对类修改,也就是在这个配置单上加一个或少一个配件,那么装出来的9 个机子都改变了,这是类对象的关系(类的实例化结果就是对象)。 就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间,房间里面要有N 台电脑,有N 张桌子,N 把椅子,白板,投影机等等,这些是什么,刚才咱们说了,这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。就构成了面向对象的程序。 上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢?一个项目要用到多少个类,用多少个对象,在那要定义类,定义一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有多少个方法等等,这就需要读者通过在实际的开发中就实际问题分析设计和总结了。类的定义:class 类名{} 类呢?上面讲过来,使用类是为了让它实例出对象来给我们用,这就要知道你想要的是什么样的对象了,像上面我们讲的一个装机配置单上写什么,你装出来的机子就有什么。比如说,一个人就是一对象,你怎么把一个你看好的人推荐给你们领导呢?当然是越详细越好了:首先,你会介绍这个人姓名、性别、年龄、身高、体重、电话、家庭住址等等。然后,你要介绍这个人能做什么,可以开车,会说英语,可以使用电脑等等。只要你介绍多一点,别人对这个人就多一点了解,这就是我们对一个人的描述,现在我们总结一下,所有的对象我们用类去描述都是类似的,从上面人的描述可以看到,做出一个类来,从定义的角度分两部分,第一是从静态上描述,第二是从动态上描述,静态上的描述就是我们所说的属性,像上面我们看到的,人的姓名、性别、年龄、身高、体重、电话、家庭住址等等。动态

对象、类、封装和接口的通俗解释

什么是类(Class) 面向对象的思想来源于对现实世界的认知。现实世界种类繁多,难于认识和理解。但是聪明的人们学会了把这些纷繁复杂的事物进行分类,从而使世界变得井井有条。比如我们由各式各样的具体的汽车抽象出“汽车”的概念,由形形色色的具体的猫抽象出“猫”的概念,由五彩斑斓的具体的鲜花抽象出“花类”的概念等。汽车、猫、花都代表着一类事物。每一类事物都有特定的状态,比如汽车的品牌、时速、马力、耗油量、座椅数;小猫的年龄、体重、毛色;鲜花的颜色、花瓣形状、花瓣数目,都是在描述事物的状态。每类事物也都有一定的行为,比如汽车启动、行驶、加速、减速、刹车、停车;猫捉老鼠;鲜花盛开。这些不同的状态和行为将各类事物区分开来。 面向对象编程也采用了类的概念,把事物编写成一个个“类”。在类中,用数据表示事物的状态,用函数实现事物的行为,这样就使编程方式和人的思维方式保持一致,极大的降低了思维难度。 什么是封装(Encapsulation) 制造汽车的过程中什么人最牛?当然不是焊钢板的,也不是装轮胎的,更不是拧螺丝的,而是设计汽车的工程师,因为他知道汽车的运行原理。但是我们开车时,需要知道汽车的运行原理吗?答案显然不需要。汽车的运行原理已经被伟大的工程师封装在汽车内部,提供给司机的只是一个简单的使用接口,司机操纵方向盘、刹车及各种按钮就可以灵活自如的开动汽车了。 与制造汽车相似,面向对象技术把事物的状态和行为的实现细节封装在类中,形成一个可以重复使用的“部件”。类一旦被设计好,就可以像工业部件一样,被成千上万的对其内部原理毫不知情的程序员使用。类的设计者相当于汽车工程师,类的使用者相当于司机。这样程序员就可以充份利用他人已经编写好的“部件”,而将主要精力集中在自己的专属领域。 对象是封装了数据和操作的程序块。所谓封装是为这个程序块建立显示的界面。其它对象只能向这个界面发消息,不能访问内部的私有数据和操作。比如我们要求某人“坐下”(发消息),某人接受消息后调整自己的肌肉、神经使自己坐下(操作),从而改变了他的状态(描述姿态的数据变了)。外界不必过问动用了哪几条神经,收缩了哪几块肌肉。 什么是接口(Interface) 司机操纵方向盘、刹车及各种按钮就可以灵活自如的使用汽车,同样,人们通过类的接口使用类。程序员在编写类时精心地为它设计接口,而设计良好的接口不但方便其他程序员使用,还有利于类的升级改造。 假设你是一个环保人士,最近你用节能的荧光灯代替了普通的白炽灯。白炽灯通过加热电阻丝照亮整个屋子;荧光灯则是激活空气中的某些分子的电子能而发光。虽然它们的原理不同,但是它们的功能却是一样的—照明。因为两种灯具有相同的接口,所以你只需拧下白炽灯,然后再拧上荧光灯即可,轻易的实现“零件”的更新换代。同样,在面向对象编程中,只要保持接口不变,你可以任意更

相关文档
最新文档