第7章-类和对象-1
Java语言程序设计(郑莉)第七章课后习题答案

Java语言程序设计第七章课后习题答案1.数组的声明与数组元素的创建有什么关系?答:声明数组仅仅是代表试图创建数组,不分配任何存储空间,声明是为创建做“铺垫”。
2.Vector类的对象与数组有什么关系?什么时候适合使用数组,什么时候适合使用Vector?答:vector是一个能够存放任意对象类型的动态数组,容量能自动扩充,而数组存储固定且类型相同的对象;对于存储固定类型相同的对象使用数组,对于存储不同类型或者动态调整数组大小的情况使用Vector。
3.与顺序查找相比,二分查找有什么优势?使用二分查找的条件?答:对于大数据量中进行查找时二分查找比顺序查找效率高得多;条件是已排序的数组。
4.试举出三种常见的排序算法,并简单说明其排序思路。
答:①选择排序:基本思想是站在未排序列中选一个最小元素,作为已排序子序列,然后再重复地从未排序子序列中选取一个最小元素,把它加到已经排序的序列中,作为已排序子序列的最后一个元素,直到把未排序列中的元素处理完为止。
②插入排序:是将待排序的数据按一定的规则逐一插入到已排序序列中的合适位置处,直到将全部数据都插入为止。
③二分查找:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
5.声明一个类People,成员变量有姓名、出生日期、性别、身高、体重等;生成10个People 类对象,并放在一个以为数组中,编写方法按身高进行排序。
//People类public class People{private String name;private String birthdaydate;private String sex;private double height;private double weight;public People(){//默认构造函数}public People(People p){=;this.birthdaydate=p.birthdaydate;this.sex=p.sex;this.height=p.height;this.weight=p.weight;}public People(String name,String birthdaydate,String sex,double height,double weight){=name;this.birthdaydate=birthdaydate;this.sex=sex;this.height=height;this.weight=weight;}public String getName() {return name;}public void setName(String name) { = name;}public String getBirthdaydate() {return birthdaydate;}public void setBirthdaydate(String birthdaydate) {this.birthdaydate = birthdaydate;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight = weight;}public String toString(){return"姓名:"+name+"\n出生年月:"+birthdaydate+"\n性别:"+sex+"\n 身高:"+height+"\n体重:"+weight;}}//test7_5类public class test7_5 {/***@param args*/public static void main(String[] args) {// TODO Auto-generated method stubPeople[] people={new People("林楚金","1989年8月13日","男",182,63.5),new People("诸葛亮","181年7月23日","男",184,76.6),new People("迈克杰克逊","1958年8月29日","男",180,60),new People("乔丹","1963年2月17日","男",198,98.1),new People("拿破仑","1769年8月15日","男",159.5,63),new People("苍井空","1983年11月11日","女",155,45),};People temp=new People();for(int i=0;i<people.length-1;i++)for(int j=i+1;j<people.length;j++){if(people[i].getHeight()<people[j].getHeight()){temp=people[j];people[j]=people[i];people[i]=temp;}}System.out.println("按身高从小到大排序后的结果如下:");for(int i=0;i<people.length;i++)System.out.println(people[i]+"\n");}}运行结果:6.声明一个类,此类使用私有的ArrayList来存储对象。
python核心编程第二版第7章习题答案

7-1.字典方法。
哪个字典方法可以用来把两个字典合并到一起。
答案:dict.update(dict2)将字典dict2的键-值对添加到字典dict中7-2.字典的键。
我们知道字典的值可以是任意的Python对象,那字典的键又如何呢?请试着将除数字和字符串意外的其他不同类型的对象作为字典的键,看看哪些类型可以,哪些不行。
对那些不能作为字典的键的对象类型,你认为是什么原因呢?答案:键必须是可哈希的。
所有不可变的类型都是可哈希的,因此他们都可以作为字典的键。
一个要说明的问题是:值相等的数字表示相同的键。
换句话说,整型数字1和浮点型1.0的哈希值是相同的,即它们是相同的键。
同时,也有一些可变对象(很少)是可哈希的,它们可以作为字典的键,但很少见。
用元组做有效的键,必须要加限制:元组中只包括像数字和字符串这样的不可变参数,才可以作为字典中有效的键。
内建函数hash()可以判断某个对象是否可以做一个字典的键,如果非可哈希类型作为参数传递给hash()方法,会产生TypeError错误,否则会产生hash值,整数。
>>> hash(1)1>>> hash('a')-468864544>>> hash([1,2])Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>hash([1,2])TypeError: unhashable type: 'list'>>> hash({1:2,})Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>hash({1:2,})TypeError: unhashable type: 'dict'>>> hash(set('abc'))Traceback (most recent call last):File "<pyshell#4>", line 1, in <module>hash(set('abc'))TypeError: unhashable type: 'set'>>> hash(('abc'))-1600925533>>> hash(1.0)1>>> hash(frozenset('abc'))-114069471>>> hash(((1,3,9)))1140186820>>> hash(((1,3,9),(1,2)))340745663>>> hash(((1,3,'9'),(1,2)))1944127872>>> hash(((1,3,'9'),[1,2],(1,2)))Traceback (most recent call last):File "<pyshell#11>", line 1, in <module>hash(((1,3,'9'),[1,2],(1,2)))TypeError: unhashable type: 'list'>>>7-3.字典和列表的方法。
第7章 面向对象学习方法学

第七章面向对象学习方法学面向对象方法学的出发点和基本原则,是尽可能按照人类的习惯思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题域空间与实现解法的解空间在结构上尽可能一致.与传统的结构化方法相比,使用面向对象方法开发的软件,其稳定性,可修改性和可重用性都比较好.本章内容主要包括:传统方法学的缺点,面向对象的基本概念,面向对象模型.7.1 基础知识7.1.1 传统方法学的缺点结构化几其他方法学的本质,是在具体的软件开发之前,通过需求分析预先定义软件需求.然后一个一个阶段地开发用户所需要的软件,实现预先定义的软件需要.过去的经验需要告诉我们,结构化及其他方法学并不能完全消除软件危机.结构化及其他方法学仍然有许多不足之处.1.问题的表现1)生产效率低在生命周期方法学中,特别重视软件开发的阶段性.为了提高了软件开发的效率,减少重大返工次数,强调必须早每个阶段结束之前进行评估.从而开发过程中实行严格的质量管理,确实提高了许多软件的开发的成功率.但是,时间表明,开发高利率仍然很有用.2)不能满足用户需要实践表明,在开发需要模糊或需求动态变化的系统时,软件系统的结果往往不能满足用户需求的变化.主要表现在两个方面:一种是开发人员不能完全获得彻底理解用户的需要,以至开发的软件系统与用户预期的系统不一致;另一种表现是,所开发的系统不能适应用户需求变化,系统的稳定性和可扩充性不能满足需要.3)软件服用就是将已有的软件成分用于构造新的软见系统.软件复用是节约人力,提高软件效率的重要途径.结构分析.设计,几乎每一次开发一个系统时都需要针对这个具体的系统做大量的重复劳动..思维成果的可复用性差.4)软件很难维护实践经验告诉我们,即使是用生命周期方法学开发出来的软件,维护起来仍然相当困难,软件维护成本很高.2.问题的原因1)结构化技术本身的问题结构分析和设计技术的基本思想是从目标系统整体功能的单个处理着手,自顶向下不断的把复杂的处理分解为子处理,一层一层的分解下去,直到剩下若干个容易实现的子处理为止。
面向对象程序设计-类和对象_V2

2 析构函数(续)
析构函数的说明 1)类只有一个,若未显式定义,编译系统 自动生成默认的析构函数。 2)系统会自动调用析构函数,在 (1)对象生存期结束时(}结束); (2)使用delete释放对象时。
3 重载构造函数
与一般成员函数一样,C++运行重载构造 函数,重载的方法一样。
class A{
2 成员函数的定义(续)
2)类内直接定义;
class student { int age;
public: void SetAge(int a){ age = a;} };
这样定义的成员函数是一种内置函数,亦 可在类外定义内置函数,不过要在函数前 加上“inline”。
2 成员函数的定义(续)
说明: 1)类外定义时,成员函数前应缀上类名。
1 构造函数(续)
构造函数的定义 class complex{ double real; double imag; public: // 下面为构造函数 complex(double r,double i) { real=r; imag=i; } double realcomplex() { return real;} };
};
1 构造函数(续)
带参数的构造函数的使用
#include <iostream.h>
void main() {
complex S1;
//使用两个缺省参数
complex S2(1.1); //使用一个缺省参数
complex S3 (1.1,2.2);
cout<<“real of A is”<<\
1 构造函数(续)
构造函数的使用说明: 1)必须和类同名,否则当作一般成员函数 2)必须无返回类型,void类型也不行 3)如果程序员未定义构造函数,编译器自 动生成一个默认的构造函数 如: complex::complex( ) { } 4)构造函数可以不带参数
第 7章 类和对象

char GetSex(); };
7.5 数据成员的初始化
1.在构造函数的函数体中进行初始化。 2.在构造函数的头部初始化。 3.混合初始化。 4.拷贝构造函数
1. 在构造函数的函数体中初始化
class Person { char m_strName[20]; int m_nAge; int m_nSex; Person(){ strcpy(m_strName,”XXX”); m_nAge=0; m_nSex=0; } Person(char *name, int age, char sex) public:
家庭情况
基本工资: double 岗位津贴: double 劳保福利: double 独生子女: double 房租: double 电费: double 水费: double 取暖费: double 保育费: double 实发工资: double
类(Class)----数据类型
<数据成员或成员函数表>;
例7-1 定义一个Person类,用来说明人员类对象
// Example 7-1:定义Person类 class Person {private: char m_strName[20]; int m_nAge; int m_nSex; public: void Register(char *name, int age, char sex); char * GetName(); int GetAge(); char GetSex(); void ShowMe(); };
3. 对象的引用
对象是包含现实世界物体特征的抽象实体,反映了系统为之保 存信息和(或)与之交互的能力。
[计算机软件及应用]第8章第一部分 类与对象
![[计算机软件及应用]第8章第一部分 类与对象](https://img.taocdn.com/s3/m/d67b8b52b0717fd5370cdc7c.png)
class Date
{
public:
Date( );
// 默认构造函数
void setDate(int,int,int); // 设置年、月、日
17
class 类名
{ private:
私有数据和函数
public:
公有数据和函数
};
大括号后的分号“;”是类定义的结束
标志。类的成员分为数据和函数,分别
称为成员数据和成员函数。成员数据描
述类对象内部数据的结构,成员函数则
用于操作类对象的这些数据。
18
class Date
{ public:
Date( );
public: void putname(char *n); void getname(char *n);
private: long num;
public: void putnum(long n); long getnum();
};Leabharlann 24成员数据的说明 一般说来,类中的成员数据可以是任何类
型的。成员数据说明的形式等同C++程序中 一般变量的定义形式。
第八章 类与对象
1
80年代后期,在计算机软件领域发生了 许多变化,这些变化极大地影响着几乎所 有的程序设计者和系统分析员的工作。面 向对象的程序设计方法: (Object-Oriented Programming)就是其中之一。
OOP并不是一种程序设计语言,而是一 种新概念——关于数据、过程和它们之间 关系的一种新的思考方法。
int X,Y; 只是这里还要使用访问说明符(类型修饰 符)private、public和protected。在说明成员数 据时不再使用修饰符extern、auto、register。
c++第6章-类和对象1-习题

c++第6章-类和对象1
-习题课
胡凤珠
6.1 判断题 × 1.使用class定义的类,其默认的访问权限是公有的,使用struct定义 的类,其默认的访问权限是私有的。 × 2.类中的成员函数都是公有的,数据成员都是私有的。 × 3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不 能是内联函数。 √ 4.类定义后,它的成员个数及名称就不会再被改变了。 × 5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。 如果类中没有定义任何构造函数时,就无法给定义的对象初始化。 √ 6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成 员函数是同类对象共享的。 √ 7.对象成员的表示方法与结构变量成员的表示方法相同。 √ 8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应 的构造函数时,系统会自动生成。 √ 9.构造函数是一个其名与类名相同的特殊的成员函数。 × 10.析构函数是一个函数体为空的成员函数。
#include <iostream.h> class Rectangle { public: Rectangle(int a,int b)//2个参数的构造函数Rectangle { width=a; length=b; }//负责对对象的宽和长数据成员初始化 int Area()//求矩形的面积 { return width*length; } int Periment()//求矩形的周长 { return 2*(width+length); } void Changesize(int a,int b)//改变矩形的宽和长 { width=a; length=b; } void Print();//负责打印求的的面积和周长 private: int width,length; }; void Rectangle::Print() { cout<<"AREA="<<Area()<<endl; cout<<"PERIMENT="<<Periment()<<endl; } void main() { Rectangle r(5,8);//定义对象r 初始化 r.Print(); r.Changesize(3,9);//调用对象r的成员函数Changesize改变宽和长 r.Print(); }
第7章软件工程全解PPT课件

D.9
11
7.2面向对象技术基础
• 考点:面向对象分析与设计的基本概念,包括对象,类, 消息,继承,多态等
• 一、基本概念 1.对象 2.消息 3.类 4.继承 5.多态 6.动态绑定
12
• 二、面向对象分析与设计基本概念 1.面向对象分析(OOA):建立待开发软件系统的模型 2.面向对象设计(OOD):定义系统构造蓝图,并根据系
• A.这三个对象所存储的数据一定是不同的 • B.这三个对象所存储的数据一定是相同的 • C.这三个对象一定具有相同的操作 • D.这三个对象无法共享数据 • 2.下列关于超类,子类,基类的叙述中,正确的是 A • A.子类是超类的特化 B.基类是超类的特化 • C.基类是子类的特化 D.超类是基类的特化
描述了谁将使用系统以及用户期望以什么方式与系统交 互。 序列图:描述了在一个用例或操作的执行过程中以时间顺 序组织的对象之间的交互活动 通信图:强调收发消息的对象之间的结构组织。
14
• 状态图:展现了一个状态机,由状态、转换、事件和活 动组成,用于建模时间如何改变对象的状态以及引起对 象从一个状态向另一个状态转换的事件。
3
7.1 软件工程和项目管理基础
➢考点:软件工程和软件生存周期的概念,软件开 发 项目管理的基础知识
➢一、软件的生存周期 可行性分析和项目开发计划; 需求分析 软件设计 编码 测试和维护
4
二、软件开发项目管理基础知识
➢ 1.成本估算 (1)自顶向下估算方法 (2)自底向上估算方法 (3)差别估算方法
_7iX7n3C0yKIn5eejUpBn4dVAPMttK8UcWRNKHAQneYpivigBd aVWD_c5d0foeYRW_0RwIWSuZ4aBHMLkQq • 3.加工逻辑(小说明) • 1.结构化语言 • 2.判定表 • 3.判定树
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成员变量
Strpinugblnicacmlaes;s Ini/t/ia姓lV名istor {
int agep;ublic/s/t年at龄ic void main(String[] args) { //显示信息Sc方an法ner input = new Scanner(S成yst员em方.i法n);
public voidVsishiotowr(v){= new Visitor();
center.classNumber = 10;
bNumber = 10;
System.out.println("\n***初始化成员变量后***");
center.
演示示例:创建和使用对象
第22页/共45页
创建和使用对象示例5-2
问题
编写学员类,输出学员相关信息
编写教员类,输出教员相关信息
分析
学员类
姓名 年龄 班级 爱好 显示学员个人信息
教员类
姓名 专业方向 教授课程
教龄 显示教员个人信息
第23页/共45页
创建和使用对象示例5-3
示例
public class SIntuitdiaelnStu{dent { Spturbinligcnstaamtiec;void//m姓a名in(String args[]成){ 员变量
实现积分回馈功能
金卡客户积分大于1000分或普卡客户积分大于 5000,获得回馈积分500分
创建客户对象输出他得到的回馈积分
完成时间:20分钟 共性问题集中讲解
第35页/共45页
按此按钮, 狮子开始跑
按此按钮, 狮子开始叫
类的方法
电动玩具狮子 属性: 颜色:黄色
行为: 跑 叫
问题
写出狮子对象的“跑”方法、 “叫”方法
类是对象的类型
各种口味的球状冰淇淋
不同于int类型:具有方法
第13页/共45页
类和对象的关系
类是抽象的概念,仅仅是模板
比如说:“人”
对象是一个你能够看得到、摸得着的具体实体
“人”类
特征(属性)
年龄 体重
行为(方法)
衣 食 住 行
小布什 普京 克林顿 ……
第14页/共45页
Java是面向对象的语言
第七章 类和对象
第一单元
提问
类与对象的关系是什么? 定义一个类的语法是什么? 如何创建一个类的对象?
预习检查
第2页/共45页
本章任务
以OO的方式实现
学校类、教员类、学生类,描述相关信息 实现管理员类、客户类,描述相关信息 游人类,输出购买门票价格 更改管理员密码 实现客户积分回馈
第3页/共45页
2、给两个对象赋值并调用
显示方法
第31页/共45页
学员操作——更改管理员密码
指导
训练要点
使用类创建对象 while循环
需求说明
输入旧的用户名和密码,如果 正确,方有权限更新 从键盘获取新的密码,进行更 新
第32页/共45页
学员操作——更改管理员密码
指导
实现思路
1. 创建管理员类的对象 2. 利用while实现循环执行
成员方法
publsictuvdoeidnts.howbb()y{= "篮球";
调用方法
Sstyustdeemnt.o.suhto.pwr(i)n;tln(name + "\n年龄:" + age + "\n就读于:" +
}
classNo + "\n爱好:" + hobby);
}}
}
演示示例:输出学员和教员信息
实现思路
1. 定义管理员类Administrator
2. 定义其属性和方法
完成时间:10分钟
共性问题集中讲解
第30页/共45页
学员操作——创建管理员对象
指导 训练要点
使用类创建对象
引用对象的属性和方法
需求说明
完成时间:10分钟
共性问题集中讲解
创建两个管理员类对象,输出他们的相关信息
实现思路
1、创建两个管理员类的对象
第17页/共45页
类示例2-1
问题
在不同北大青鸟培训中心,会感受到相同的环 境和教学氛围,用类的思想输出中心信息
School类 属性:
中心全称 中心教室数目 中心机房数目 方法: 展示中心信息
第18页/共45页
类示例2-2
示例
public class School { String schoolName; int classNumber; int labNumber;
}
} 定义类的showCenter()方法,
用于输出类相关的信息
演示示例:定义School类
第19页/共45页
第20页/共45页
如何创建和使用对象
使用对象的步骤
语法 创建对象
语法
类名 对象名 = new 类名();
School center = new School();
引用对象成员:使用“.”进行以下操作
提问
结合定义类的语法,分析如下类的结构
public class Test { public String guest; public int year;
成员变量(全局变量) 属性(成员变量)
局部变量
public void sayHello(String host){
System.out.println(guest+"去"+host+"家做客, 方法(成员方法) 他们认识了"+year+"年");
第24页/共45页
创建和使用对象示例5-4
问题
一个景区根据游人的年龄收取不同价格的门票。 请编写游人类,根据年龄段决定能够购买的门 票价格并输出
分析
游人类
姓名 年龄 显示姓名及门票价格
第25页/共45页
创建和使用对象示例5-5
示例
public icmlapsos rVtijsaitvoar.u{til.Scanner;
掌握类和对象 理解封装 会创建和使用对象
本章目标
重点 难点
重点
第4页/共45页
世界是由什么组成的?
名胜
万物皆对象
动物 ,植物…… 人
物品
分类是人们认识世界的一个很自然的过程,在 日常生活中会不自觉地进行分类
第5页/共45页
张浩
顾客 姓名—张浩 年龄—20 体重—60kg 操作: 购买商品
身边的对象
列出小狗对象的属性和方法 颜色:白色 方法: 叫 跑 吃
第9页/共45页
封装
对象同时具有属性和方法两项特性 对象的属性和方法通常被封装在一起,共同体现 事物的特性, 二者相辅相承,不能分割
一辆汽车,有完好的零件和特定的颜色 还应具备开动、刹车等方法行为
第10页/共45页
提问
说一说教室里的对象 描述他们的属性和方法
第36页/共46页
示例
AutoLion类代码实现
类的方法示例
public class AutoLion {
String color = "黄色"; 返回值类型
public void run() {
System.out.println("正在以0.1米/秒的速度向前奔跑");
} 方法名称
public String bark() {
}
第15页/共45页
Java类模板
类将现实世界中的概念模拟到计算机程序中
语法
public class 类名 { //定义属性部分 属性1的类型 属性1; 属性2的类型 属性2; … 属性n的类型 属性n; //定义方法部分 方法1; 方法2; … 方法m;
}
第16页/共45页
定义一个类的步骤
定义类
}
}
第28页/共45页
局部变量VS成员变量
比较 定义位置 声明赋值
作用域
注意
成员变量
局部变量
直接在类中定义
定义在方法中
可以在声明时赋初始值;若不 赋值,会有默认初始值,基本 数据类型的值为0,引用类型 的值为null
在使用前需要赋值
在整个类内部都是可见的,所 有成员方法都可以使用它,如 果访问权限允许,还可以在类 外部使用
收银
收银员李明
打印账单
方法
刷卡
对象:用来描述客观事物的一个实体,由一组属 性和方法构成
第8页/共45页
对象的属性和方法
提问
列出尼古拉斯·凯奇驾驶的这辆法拉利F360
Spider的属性和方法
属性: 品牌:法拉利 型号:F360 Spider 颜色:黄色 价格:380万元
方法: 发动 停止 加速
属性:
方法体
String sound = "大声吼叫" ;
return sound;
} }
第37页/共46页
如何定义类的方法
类的方法定义类的某种行为(或功能)
方法的名称
颜色:黑色 品牌:BENQ 投影
材制: 木质 支撑物品
姓名:张三 年龄:20 学习
小结
类型:白炽灯 开 关 变亮 变暗
第11页/共45页
从对象抽象出“类”
问题
抽取出下列对象的共同特征(属性和方法)
第12页/共45页
顾客类 轿车类
…… ……
类
类是模子,定义对象将会拥有的 特征(属性)和行为(方法)
难点指导
循环执行