类与类之间的关系对于理解面向对象具有很重要的作用
类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)泛化(Generalization)
(2)关联(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)
UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]
父类父类实例=new 子类()
[UML图](图1.1)
图1.1Animal类与Tiger类,Dog类的依赖关系
[代码表现]
1.class Animal{}
2.class Tiger extends Animal{}
3.public class Test
4.{
5.public void test()
6.{
7.Animal a=new Tiger();
8.}
9.}
2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
图1.2 Person类与Screwdriver类的依赖关系
1. public class Person{
2. /** 拧螺丝 */
3. public void screw(Screwdriver screwdriver){
4. screwdriver.screw();
5. }
6. }
3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)
图1.3 公司和员工的关联关系
[代码表现]
?public class Company{
? private Employee employee;
? public Employee getEmployee(){
? return employee;
? }
? public void setEmployee(Employee employee){
? this.employee=employee;
? }
? //公司运作
? public void run(){
? employee.startWorking();
? }
?}
(4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2) 对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
[UML图](图1.4)
图1.3 电脑和组件的聚合关系
[代码表现]
?public class Computer{
? private CPU cpu;
? public CPU getCPU(){
? return cpu;
? }
? public void setCPU(CPU cpu){
? this.cpu=cpu;
? }
? //开启电脑
? public void start(){
? //cpu运作
? cpu.run();
? }
?}
聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a
的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
1.UML类图图示样例
2.1继承关系:
用空心三角形+实线来表示
2.2实现接口:
用空心三角形+虚线来表示
说明:以上为一对,两者都用空心三角形,继承关系比实现接口关系耦合性强,所以继承用实线,实现接口用虚线
2.3合成关系:
(Composition,也有翻译成‘组合、复合’的)是一种强的‘拥有’关系:
体现了严格的部分和整体的关系,部分和整体的生命周期一样。在这里鸟和其翅膀就是合成(组合)关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。合成关系用实心的菱形+实线箭头来表示。另外,你会注意到合成关系的连线两端还有一个数字‘1’和数字‘2’,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用‘n’来表示
2.4聚合关系:
表示一种弱的‘拥有’关系
体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+实线箭头来表示
说明:以上为一对,可以这样记忆,复合关系比聚合关系耦合性强,所以复合菱形为实心,聚合菱形为空心
2.5关联关系:
用实线箭头来表示:
企鹅需要‘知道’气候的变化,需要‘了解’气候规律
2.6依赖关系(Dependency):
用虚线箭头来表示,动物依赖于氧气和水
说明:以上为一对,可以这样记忆,关联关系比依赖关系耦合性强,所以,关联关系用实线,依赖关系用虚线
2.7接口的两种表示方法:‘飞翔’,它表示一个接口图,与类图的区别主要是顶端有<
2.8注释表示方法:
如何理解文中句子含义
阅读题中理解句子类题型: 一、理解句子含义。所谓理解句子含义,指的是既要说出句子的表层意思,又要说出句子的深层意思。 问题的主要形式有: 上文中画线句子在文中的含义是什么? 揣摩下列各句,说说你对句子的理解。 揣摩文中画线句子,回答问题。 二、理解句子表现的作者的思想感情。任何一篇文章都要表达作者对生活的看法或情感,作者是通过文章中的词语、句子来表达基本意思和情感的。 问题的主要形式有: 联系上下文,揣摩文中画线句子,想想这些语言表现人物怎样的感情? 三、谈谈自己的体会。这类句子多是文章的论点、观点、议论句、抒情句、主旨句等,多以主观题出现。 问题的主要形式有: 请联系你的生活体验,谈谈你对画线语句的理解。
联系全文,你如何理解画线句,这句话对你有什么启发?请联系实际谈谈自己的体会。 四、指出句子在文中的表达作用。这类句子多是在文章结构中起着关键作用,比如过渡衔接、前后照应、揭示主旨、升华主题等。 问题的主要形式有: 文中画线句子在文章中起什么作用? 请从第x段摘抄与第y段中画线部分照应的文字。 解答方法: 不同文体的文章,其重要句子的侧重点多有不同。例如,记叙文要求侧重理解文中交代要素的句子,叙述中穿插的精彩的议论、抒情的句子;议论文要求侧重理解表明观点的句子,论述精辟的句子;文学作品要求侧重理解文中对刻画人物、反映主题有重要作用的句子。对于这类试题的解答,解题的时候可以借助下面这则顺口溜: 关键词语很重要,理解句子离不了。句子若是总领句,须从下文去搜索。 句子若是总结句,答案须要往上溯。句子若是过渡句,须要关注上下文。 句子表达有特点,揣摩目的和效果。以上方法记住了,答题才能有依托。 根据这则顺口溜,我们答题时可运用以下四种方法: 1.从句子中的关键词语入手,通过对其语境意义的把握来理解句子的含义。
面向对象程序设计的基本思想
课题:面向对象程序设计的基本思想 (一)教学设计思想与理论依据: 《算法与程序设计》模块的教学强调通过该模块的学习,学生应该体验客 观世界的计算机对象化表征和算法思维,掌握几种基本算法;能运用面向对 象的方法,设计解决简单问题的算法,并能初步使用一种面向对象的程序设 计语言,编制程序实现算法解决该问题。 (二)教学内容分析 教材以广东教育出版社出版的信息技术(选修一)《算法与程序设计》第五章第一节内容为结构框架,本节主要介绍面向对象思想产生的必然性和面向对象思想的机制,以及通过对同一个问题采取面向过程和面向对象两种不同思想解决的区别,让学生感受到面向对象程序设计的优越性。 (三)学生情况分析: 学生已学完教材前四章内容,基本掌握了传统的面向过程结构化程序设计方法,有一定的程序设计基础。 (四)教学策略与模式: 采用讲解、任务驱动、实践和学生自主学习相结合的教学方式 (五)教学资源: 硬件:多媒体电脑教室,投影仪,广播系统 软件:学生机安装vb6.0 (六)教学目标: 知识与技能 1.了解面向对象程序设计的基本思想和面向对象思想的由来,并能够举例说 明现实世界与面向对象系统之间的对应关系。 2.了解面向对象程序设计的优越性并初步理解其实现的机制。 过程与方法 经历分析、调试解决同一问题的两种不同实现思想的程序,初步理解面向对象程序设计的优势及面向过程程序设计的缺陷。 情感态度和价值观 (1)关注传统结构化程序设计存在的问题。 (2)产生学习面向对象程序设计技术的愿望。 (3)关注面向对象技术是当前程序设计的重要发展方向。 (七)重点难点 教学重点 (1)传统结构化程序设计存在的问题 (2)面向对象程序设计所具有的优点。 教学难点 (1)面向对象思想的产生。 (2)传统结构化程序设计与面向对象程序设计的基本点比较。 (3)实现面向对象程序设计的基本机制。 教学过程:
记叙文:理解文章句子含义及作用 (下)
记叙文:理解文章句子含义及作用(下) 近几年中考题 1.培根的随笔语言生动,说理深刻。请从文中摘录你最喜欢的一句话(文中划线句子除外) 推荐给朋友,并说明推荐理由。(08 年) 2.文中“这一副寒光四射的匕首”运用了什么修辞手法?这样写有什么作用? (07 年) 3.下面句子是怎样传神地表现人物心理活动的? (07 年) 祥子的脸通红,手哆嗦着,拍出九十六块钱来:“我要这辆车!” 见招拆招: 分析句子的作用:看位置,一般从内容和结构两方面作答。 ①开头:开篇点题、设置了悬念,引起读者的兴趣或思考;总领全文、引出下文、为下文作铺 垫(埋下伏笔)。 ②中间:承上启下、总结上文……、引出下文…… ③结尾:画龙点睛、深化中心;篇末点题、总结全文、照应开头。 识类别(5 类): 1.人物描写句: 外貌(肖像)、语言、动作、神态、心理描写、细节描写。 ★答题格式:运用……描写,生动形象地表现了××(谁)的……的心理(性格、品质)等。 例1:“怎么,两元钱?瞎婆婆手里分明拿着一元钱呀!”望着瞎婆婆那满脸刀痕的皱纹、干瘪的眼睛,我和母亲瞬间都明白了。“多么奸诈的小商人,他们竟伤天害理地欺骗一个孤苦伶仃的老婆子!要知道,这10 斤地瓜皮子,瞎婆婆要风里来、雨里去在黑暗中摸索多少天,奔走多少户呀!” 运用心理描写,生动形象地表现了作者对奸诈商人的痛恨,对瞎婆婆被骗的同情。 2.环境描写句: 自然环境和社会环境 1.渲染气氛 2.衬托心情 3.推动情节发展 4.为下文作铺垫 5.交代人物活动的场景 6.交代文章的时代背景 例2《爱如山路十八弯》:一个人在外拼搏,很难。举目的陌生,更是让她的心多了几层寒冷。那山重水复的十八湾,那曲曲折折的小山路,时常出现在她的梦中。好在公司看大门的张伯,总对她关怀备至。下雨天他会为她送伞,家里做了好吃的,他会用半旧的饭盒装着,给她带来。她好奇地问张伯:“怎么对我这么好?”张伯笑笑说:“你像我的女儿啊,我也有个你这么大的女儿,在外地读大学呢。”那一刻,她想到父亲,心,突然很疼很疼。 这里环境描写,渲染了一种凄美的气氛,烘托了“她”思念家乡、思念亲人的心情。
面向对象思想
面向对象思想----不看后悔! 前言: 整理这份资料的目的是为了帮助朋友们能够更直观的理解面向对象的编程。让后来者能够少走一些弯路。但其中不免有许多漏洞及错误,也还请前辈提出宝贵的更改意见,毕竟交流会让我们不断的进步。 技术是日新月异的,他不会等待你的成长。技术要拿出来于别人交流,自己学是自己主观意识上的理解,有对有错!交流会让进步变得更快。我认为如果计算机的体系结构不发生革命性的变化,我们现在所应用的程序语言也就百变不离奇踪了!学编程学的是什么?思想!精通一门编程语言(最好是面向对象的语言)后再去搞其他的编程语言,你会发现过程是如此的行云流水!为什么?你已经把编程的思想掌握了,再去学其他的,无非是学习一种新的语法格式了。 我在这里并不是和你讨论怎么去用C++或JAVA,也不是和你讨论怎么去学他们,我要和你讨论的是怎么去理解面向对象。其中主要会涉及到“类、对象、继承、属性、方法、静态、重载、隐藏、重构、声明、定义、初始化、赋值等”其中有许多相关技术我只会一代而过,让你有一种到此一游的意味我就达到目的了,而更详细的技术内幕,就请参考其他相关书籍而深入研究吧!因为我只是在和你探讨如何去更好的理解面向对象! 如何去提高效率?重复使用资源,把别人的东西拿来就用。这是很不错的主意!而对于你来说,最大的资源就是信心以及积极性!好,打起精神来,让我们一同到面向对象的编程中去寻幽访胜吧! 注:文章中所有程序实例我都使用JAVA写的,当然在C++中也就大同小异了了,不同的地方我会指出! 注:文章中的正文文字用黑色,说明文字用蓝色,强调文字用橙色,批改文字用红色! 正文: 1.基本概念: 1.1 类与对象的初探 要我说,无论是面向过程的语言也好,面向对象的语言也罢,我首先要给他讲的都是类和对象!--------“这个世界是由什么组成的?”这个问题如果让不同的人来回答会得到不同的答案。如果是一个化学家,他也许会告诉你“还用问嘛?这个世界是由分子、原子、离子等等的化学物质组成的”。如果是一个画家呢?他也许会告诉你,“这个世界是由不同的颜色所组成的”。……呵呵,众说纷纭吧!但如果让一个分类学家来考虑问题就有趣的多了,他会告诉你“这个世界是由不同类型的物与事所构成的”好!作为面向对象的程序员来说,我们要站在分类学家的角度去考虑问题!是的,这个世界是由动物、植物等组成的。动物又分为单细胞动物、多细胞动物、哺乳动物等等,哺乳动物又分为人、大象、老虎……就这样的分下去了! 现在,站在抽象的角度,我们给“类”下个定义吧!我的意思是,站在抽象的角度,你回答我“什么是人类?”首先让我们来看看人类所具有的一些特征,这个特征包括属性(一些参数,数值)以及方法(一些行为,他能干什么!)。每个人都有身高、体重、年龄、血型等等一些属性。人会劳动、人都会直立行走、人都会用自己的头脑去创造工具等等这些方法!人之所以能区别于其它类型的动物,是因为每个人都具有人这个群体的属性与方法。“人类”只是一个抽象的概念,它仅仅是一个概念,它是不存在的实体!但是所有具备“人类”这个群体的属性与方法的对象都叫人!这个对象“人”是实际存在的实体!每个人都是人这个群