资源预览内容
第1页 / 共96页
第2页 / 共96页
第3页 / 共96页
第4页 / 共96页
第5页 / 共96页
第6页 / 共96页
第7页 / 共96页
第8页 / 共96页
第9页 / 共96页
第10页 / 共96页
亲,该文档总共96页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第2章章 面向对象技术面向对象技术面向对象(Object Oriented,OO)2.1 面向对象程序设计语言面向对象程序设计语言C+JavaC#Delphi(Pascal)VB.NET(VB)Delphi 和和C#之父:之父:Anders Hejlsberg语言大师语言大师:安德尔斯安德尔斯Anders Hejlsberg与与Delphi毕业于丹麦科技大学,曾是毕业于丹麦科技大学,曾是Borland公司的创始人之一。公司的创始人之一。在在Borland期间,期间,Anders Hejlsberg开发了著名的开发了著名的Turbo Pascal语言,并在其基础上将语言,并在其基础上将Turbo Pascal变成一种面变成一种面向对象、真正拥有可视化编程环境和卓越的数据库库访向对象、真正拥有可视化编程环境和卓越的数据库库访问特性的应用程序开发语言问特性的应用程序开发语言Delphi。现在。现在Delphi依然是依然是Borland公司的拳头和旗帜性产品,并成为了广大开发人公司的拳头和旗帜性产品,并成为了广大开发人员最喜欢的员最喜欢的RAD(快速编程语言)应用开发工具之一。(快速编程语言)应用开发工具之一。 真正的程序员用真正的程序员用C,聪明的程序员用,聪明的程序员用Delphi。Anders Hejlsberg与与Visual Basic20世纪世纪90年代年代Anders领导开发的领导开发的Delphi取得巨大成功,取得巨大成功,这也这也对微软的对微软的Visual Basic构成了极大的威胁构成了极大的威胁,因此比尔,因此比尔盖茨再次启用微软发家法宝之一的盖茨再次启用微软发家法宝之一的“挖人挖人”招术:用丰招术:用丰厚的薪水、股票认购权和巨额的加盟奖金将厚的薪水、股票认购权和巨额的加盟奖金将Anders挖到挖到了微软。了微软。1996年年Anders来到微软。来到微软。Delphi号称号称Visual Basic 杀手杀手Anders Hejlsberg与与Visual J+(Java)1996年年Anders来到微软后,直接主抓来到微软后,直接主抓Visual J+的研发的研发工作。后来由于在工作。后来由于在Java开发工具授权问题上和开发工具授权问题上和Sun公司公司的纠纷,微软停止了的纠纷,微软停止了Visual J+的后续开发。的后续开发。 Java语言的优势是跨平台性。语言的优势是跨平台性。Anders Hejlsberg与与C#微软在微软在Visual J+项目中处于极为被动的局面,就在人们项目中处于极为被动的局面,就在人们认为微软不可能再有改观的时候,微软另辟蹊径,认为微软不可能再有改观的时候,微软另辟蹊径,在在anders的主持下,推出了的主持下,推出了.NET计划和计划和C#语言语言。 code once ,run anywhere。2010年3月编程语言排行榜http:/www.tiobe.com2009年4月20日视频:甲骨文74亿美元收购Sun欧盟无条件批准欧盟无条件批准Oracle公司对公司对Sun收购案的消息,实际上宣告了收购案的消息,实际上宣告了一个伟大公司的离去。一个伟大公司的离去。Java之父James Gosling在自己的博客贴出了一幅画,应该代表了许多技术人的心情。悼念一个伟大的公司 Java的辉煌还能延续多久链接:Java之父离开OracleGosling博客全文如下:是的,那些传言都是真的:我已经在一周前(4月2日)从Oracle辞职。我要对周三参加圣彼得堡TechDays希望听我演讲的所有人道歉。没能出席,我感到非常难受。至于离开的原因,我很难回答:能说的任何准确而且真实的话都弊大于利。最困难的地方,是无法再与这些年来我有幸一起工作的所有人共事了。除了在找工作之前休息一段时间之外,我不知道下一步会做些什么。小结:小结:C+是目前功能最为强大的语言。是目前功能最为强大的语言。Visual Basic是最容易使用的语言。是最容易使用的语言。Delphi兼具兼具C+功能强大和功能强大和VB易于使用的特点,最跨平易于使用的特点,最跨平台性不于台性不于java,java和和.NET打乱了打乱了Delphi的发展计划。的发展计划。Java的突出特点是跨平台性,但功能不如的突出特点是跨平台性,但功能不如C+。C#是是最年青、面向对象最彻底最年青、面向对象最彻底的语言,结合了的语言,结合了C+、java、Delphi等各种语言的优点。等各种语言的优点。点击打开全文2.2 面向对象编程面向对象编程以以C# 语言为例语言为例注意:注意:UML是独立于程序语言的。是独立于程序语言的。“如果你有一只猫,你想把它卖给一个编程者,那么,与其强调其可爱与温顺,或如何能捉老鼠,不如直接告诉买家,这只猫是面向对象的。” 关于猫与面向对象的经典名言非常形象的揭示了面向对象在IT界乃至整个学术界的地位。一、一、C#概述概述1、C#的产生的产生2000年年6月,月,Microsoft .NET开发平台的发布,标志着近开发平台的发布,标志着近10年来年来Microsoft公司开发平台一个重大的转变。公司开发平台一个重大的转变。C#是一种安全的、稳定的、简单的,由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。比尔.盖茨者,美华盛顿州人也,初,就读于哈佛大学,茨平素嬉游无度,不务于正业,每逢试,动辄为C,虽偶有B,未曾见有A者,故老师同学皆讥之。茨乃心中不愤,遂决心使C乃为名动天下之字母,乃辍学。后结识一人,共创今日之C语言,并立公司曰微软。且出Visual Studio系列,中有VB,VC,然未有VA者,盖避其学业之讳也。世人皆用之,然其内幕稀知矣。时易事移,C已显老迈不可之态,乃创其更新版本,欲名C+。然同创业者,皆曰C+何若C+也,似应名之为此。茨迫于众意,勉强可之。故今日之C+,本应名C+者也,此亦缘何由C径至C+而逾过C+之因也。C#的故事时至新世纪,茨欲将时至新世纪,茨欲将C+再升一级,将名之曰再升一级,将名之曰C+。时。时有汉人李开复者,乃献言。复,汉之台湾人也,就业于有汉人李开复者,乃献言。复,汉之台湾人也,就业于美之名校卡梅大学,时任微软中国研究院之主任。复曰:美之名校卡梅大学,时任微软中国研究院之主任。复曰:“窃为明公不可也。窃为明公不可也。”茨曰:茨曰:“何哉?何哉?”复乃答曰:复乃答曰:“C+太显累赘,吾有一字,明公鉴之。太显累赘,吾有一字,明公鉴之。”茨曰:茨曰:“何何字?字?”复曰:复曰:“莫若莫若C卅,或卅,或C丰最妙。丰最妙。”茨颇不解:茨颇不解:“卿何意哉?卿何意哉?”复乃详言曰:复乃详言曰:“夫卅者夫卅者,三三+横排也;夫丰者,横排也;夫丰者,三三+竖排也。言简而意赅,岂不妙哉?竖排也。言简而意赅,岂不妙哉?”茨大悦,乃于董茨大悦,乃于董事会上宣布之。然一派言事会上宣布之。然一派言C卅优,盖卅横排三卅优,盖卅横排三+,恰,恰C+之意也。另一派言之意也。另一派言C丰乃妙,盖竖排三丰乃妙,盖竖排三+,乃喻微软之蒸,乃喻微软之蒸蒸日上也。蒸日上也。二派纠辨甚凶。茨无奈,复就询于开复,乃许之曰:二派纠辨甚凶。茨无奈,复就询于开复,乃许之曰:“卿若解此难,吾可以副总裁之位许卿。卿若解此难,吾可以副总裁之位许卿。”复心狂喜,乃复心狂喜,乃表曰:表曰:“明公勿急。前有从明公勿急。前有从C径升径升C+,今何不从,今何不从C+径径升升C+,而逾,而逾C+乎?吾中华上国,有一井字,乃四乎?吾中华上国,有一井字,乃四+所并而成,何不名下一版本为所并而成,何不名下一版本为c#乎?乎?”茨然其言,乃如茨然其言,乃如约升之为微软之副总裁。约升之为微软之副总裁。Visual Studio .NET 2002 (7.0)Visual Studio .NET 2003 (7.1)Visual Studio 2005(VS2005) (8.0)Visual Studio 2008(VS2008) (9.0)2、C#编程和编译环境编程和编译环境windows 应用程序应用程序ASP.NET网站网站控制台应用程序控制台应用程序VS2005二、二、C#简明语法简明语法1、数据类型、数据类型整型:整型: int浮点型:浮点型:float、double字符型:字符型:char字符串:字符串:string 布尔型:布尔型:boolclass Uninitial public static void Main() int num; num=10; Console.WriteLine(num); 2 2、运算符、运算符算算术术+ - * / 逻辑逻辑& | ! 关系关系= != =字符串字符串连连接接+3、控制台程序的输入与输出、控制台程序的输入与输出 (1)输出:)输出:Console.WriteLine()用于向控制台输出一行信息用于向控制台输出一行信息(2)输入:)输入: Console.ReadLine()用于从控制台中一次读取一行字符串,直到遇到用于从控制台中一次读取一行字符串,直到遇到Enter键键才返回读取的字符串。才返回读取的字符串。class Programstatic void Main(string args) string x; string y; int z; Console.Write(请输入第一个数请输入第一个数:); x = Console.ReadLine(); Console.Write(请输入第二个数请输入第二个数:); y = Console.ReadLine(); z = int.Parse(x) + int.Parse(y); Console.WriteLine(两个数的和为:两个数的和为:0, z); 4、程序控制语句、程序控制语句 (1)if语句语句形式形式2:if (表达式表达式) 语句语句1else 语句语句2形式形式1:If (表达式表达式) 语句语句;class Add public static void Main() int a,b; string c; Console.Write(请输入一个数值:请输入一个数值:); c= Console.ReadLine(); a=int.Parse(c); b=20; if(a10) Console.WriteLine(“大于大于”); class Compare public static void Main() int a, b, x; Console.Write(请输入一个数值:请输入一个数值: ); a=int.Parse(Console.ReadLine(); Console.Write(请再输入一个数值:请再输入一个数值: ); b=int.Parse(Console.ReadLine(); if (ab) x=a; else x=b; Console.WriteLine(the max is: 0 , x); (2)while语句语句 while (条件表达式条件表达式) 语句语句【例例】使用使用while语句,计算语句,计算1+2+3+.+100。class Sum1 public static void Main() int sum=0, i=1; while (i=100) sum=sum+i; i=i+1; Console.WriteLine(sum=0, sum); 三、三、C#面向对象程序演示面向对象程序演示目标:面向对象程序的特点,引出相关的概念目标:面向对象程序的特点,引出相关的概念面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。来源:互联网面向对象与面向过程的区别面向过程的程序员认为计算机世界是由一系列功能构成,功能的核心是算法,围绕算法有许多数据,数据从简单到复杂,统称为数据结构,程序就是功能之间通过数据衔接。面向对象的程序员认为计算机世界是由许许多多的对象组成,每个对象都有属于自己的各种动作,程序就是对象之间通过动作进行交互。 简单地面向对象程序演示(code/exame)情景假设:1名学生的补考:1、老师出卷2、老师安排考试(1)向教务处向教室和时间(2)要求学生开始答题3、老师改卷 class teacher public string name; public teacher(string x) name = x; public void ChuJuan() /出卷 Console.WriteLine(name + 老师出卷); public void AnPaiKaoShi(JiaoWuChu j,student s) j.AnPaiShiJianDiDian(UML); s.DaTi(); public void GaiJuan() /改卷 Console.WriteLine(name + 老师改卷); class student public string name; public student(string x) name = x; public void DaTi() /答题 Console.WriteLine(学生 + name + 答题); class JiaoWuChu /教务处s public void AnPaiShiJianDiDian(string s) /安排时间地点 Console.WriteLine(s + “的考试地点:西苑10-806;考试时间: 第10周周五上午10:00-12:00); class Program static void Main(string args) teacher t = new teacher(李维); JiaoWuChu j = new JiaoWuChu(); student s = new student(张三); t.ChuJuan(); /老师出卷 t.AnPaiKaoShi(j,s); /老师安排考试 t.GaiJuan(); /老师改卷 小结:面向对象编程的关键步骤小结:面向对象编程的关键步骤u定义类定义类u通过类创建对象通过类创建对象u调用对象的操作,访问对象的属性调用对象的操作,访问对象的属性比较:面向过程编程与面向对象编程比较:面向过程编程与面向对象编程在面向过程编程模式中,在面向过程编程模式中,围绕功能围绕功能(步骤步骤)来构造系统来构造系统。在面向对象编程模式中,在面向对象编程模式中,围绕对象来构造系统围绕对象来构造系统。2.3 面向对象的基本原理面向对象的基本原理面向对象的思想这样认识世界:面向对象的思想这样认识世界:u客观世界由各种各样的实体组成,这些实体称为客观世界由各种各样的实体组成,这些实体称为对象对象。u每个对象都有各自的每个对象都有各自的内部状态和运动规律内部状态和运动规律,在外界其他,在外界其他对象或环境的影响下,对象会根据发生的具体事件作出不对象或环境的影响下,对象会根据发生的具体事件作出不同的反应,进行对象间的同的反应,进行对象间的交互交互。u按照对象的属性和运动规律的相似性,可以将相近的对按照对象的属性和运动规律的相似性,可以将相近的对象划分为一象划分为一类类。u复杂的对象由相对简单的对象通过一定的方式复杂的对象由相对简单的对象通过一定的方式组成组成。u不同对象的组合及对象间的相互作用和联系构成了各种不同对象的组合及对象间的相互作用和联系构成了各种不同的系统,构成了人们所面对的客观世界。不同的系统,构成了人们所面对的客观世界。一、客观世界由各种各样的实体组成,这些实体称为对象一、客观世界由各种各样的实体组成,这些实体称为对象OOP:从问题域中客观存在的事物出发来构造软件系统,:从问题域中客观存在的事物出发来构造软件系统,用用对象对象用为对这些事物的抽象表示,并以此作为用为对这些事物的抽象表示,并以此作为系统的基系统的基本构成单位本构成单位。面向对象的形象解释(1)所谓对象,在 Developer 眼里万物皆为对象。比如,我们从早上起床开始:睁开眼(Object)看见天(Object)亮了,那是因为有光(Object),抬头(Object)望望窗(Object)外,太阳(Object)出来了.面向对象的形象解释(2)那么我们是怎么区分这些对象呢?天上有一个太阳一个月亮,我们从小就知道它们是不同的,甚至不需要理由。为什么?因为它们的外观形态、活动规律都有极大的区别。比如你看见一个对象,它有5吨重,3米高,四条粗腿,一条长鼻子,两只大白牙,即使你从没见过你也应该知道它是什么。再比如我现在敲这段文字的时候,腿上一阵奇痒,不用看我就知道屋子里至少有一只蚊子而且还是位蚊子小姐,因为我已经知道在这种情况下只有母蚊子才具有“叮”这种行为。二、每个对象都有各自的内部状态和运动规律二、每个对象都有各自的内部状态和运动规律在外界其他对象或环境的影响下,对象会根据发生的具在外界其他对象或环境的影响下,对象会根据发生的具体事件体事件作出不同的反应,进行对象间的交互作出不同的反应,进行对象间的交互。面向对象的形象解释(3)新的问题又来了。比如我们这个小区有不少养宠物的,每天傍晚狗跳猫蹿的煞是热闹。虽然每只狗都有不同,每只猫也都相异,但看上去狗都是,狗猫都是猫。原因是它们主要的状态和行为虽然都完全相同,这就有了类(Class)。类的状态称为属性(Property),而行为就是方法(Method)了。三、按照对象的属性和运动规律的相似性,可以将相近三、按照对象的属性和运动规律的相似性,可以将相近的对象划分为一类的对象划分为一类MP3计算机计算机类是这些对象的抽象描述,类是这些对象的抽象描述,每个对象是类的一个实例每个对象是类的一个实例。四、复杂的对象由相对简单的对象通过一定的方式组成四、复杂的对象由相对简单的对象通过一定的方式组成对象具有可分解性和组合性。对象具有可分解性和组合性。面向对象方法的胜利五、不同对象的五、不同对象的组合组合及对象间的及对象间的相互作用和联系相互作用和联系构成了构成了各种不同的系统,构成了人们所面对的客观世界。各种不同的系统,构成了人们所面对的客观世界。2.4 面向对象的基本概念面向对象的基本概念面向对象是一种运用对象、类、继承、封装、多态、面向对象是一种运用对象、类、继承、封装、多态、消息等概念来构造系统的软件开发方法。消息等概念来构造系统的软件开发方法。面向对象面向对象=对象对象+类类+封装封装+继承继承+多态多态一、对象与类一、对象与类对象:客观世界中的实体,对象由一组对象:客观世界中的实体,对象由一组属性和操作组成。属性和操作组成。类类:具有相同具有相同属性和行为的对象集合。属性和行为的对象集合。抽象为抽象为MP3对象:对象: class student public string name; public student(string x) name = x; public void DaTi() /答题答题 Console.WriteLine(学生学生 + name + 答题答题); 创建学生对象创建学生对象 student s1 = new student(张三张三); student s2 = new student(李四李四);类:类:student对象:对象:s1、s2思考题:思考题:一个类可以创建多个对象,这些对象之间的区间体现在一个类可以创建多个对象,这些对象之间的区间体现在(A)属性的类型不同)属性的类型不同(B)属性的个数不同)属性的个数不同(C)操作的个数不同)操作的个数不同(D)属性值不同)属性值不同二、对象的特性:封装二、对象的特性:封装封装是把对象的属性和操作结合成一个独立的系统单位,封装是把对象的属性和操作结合成一个独立的系统单位,并尽可能地隐藏对象的内部细节。并尽可能地隐藏对象的内部细节。封装有两重含义:封装有两重含义:1 1、把相关的数据(属性)和操作结合在一起,组成一个、把相关的数据(属性)和操作结合在一起,组成一个一个不可再分的独立单元,即对象。一个不可再分的独立单元,即对象。2、封装允许有选择地隐藏对象中的属性和操作(通过、封装允许有选择地隐藏对象中的属性和操作(通过可可见性来实现见性来实现)。)。 class student public string name; public student(string x) name = x; public void DaTi() /答题答题 Console.WriteLine(学生学生 + name + 答题答题); 三、类的特性:继承(派生、泛化)三、类的特性:继承(派生、泛化) 子类拥有父类的全部属性和操作。子类拥有父类的全部属性和操作。定义子类时不必定义子类时不必重复定义那些已经在父类中定义过的属性和操作,重复定义那些已经在父类中定义过的属性和操作,在此基础上还可以添加自己的属性和操作。在此基础上还可以添加自己的属性和操作。A B K() C W()A父类父类基类基类一般类一般类B子类子类派生类派生类特殊类特殊类如果如果A继承于继承于B,则:,则:单重继承单重继承多重继承多重继承只有只有C+还支持多重继承,其他语言(还支持多重继承,其他语言(C#、java)等都)等都已经取消了多重继承。已经取消了多重继承。程序演示:code/graduate class student public int number; public string name; public string myclass; class graduate:student public string research; public string teacher; class Program static void Main(string args) graduate g1 = new graduate(); g1.number = 1000; g1.name = 张三; g1.myg1.research = 管理系统工程; g1.teacher = 汪应洛; Console.WriteLine(姓名:+g1.name); Console.WriteLine(导师:+g1.teacher); 程序演示:code/graduate四、对象之间的联系纽带四、对象之间的联系纽带消息消息对象之间通过传递消息来相互作用,对象之间通过传递消息来相互作用,消息在代码中体现为消息在代码中体现为函数(操作)的调用。函数(操作)的调用。消息包含三个方面的内容消息包含三个方面的内容: :消息的接收者消息的接收者接收对象应采用的方法接收对象应采用的方法方法所需要的参数(可以为空)方法所需要的参数(可以为空)消息:消息: class teacher public void AnPaiKaoShi() /安排考试安排考试 j.AnPaiShiJianDiDian(UML); s.DaTi(); 五、类的特性:多态五、类的特性:多态多态性:同名的操作被不同的对象接收时,可产生不同的动多态性:同名的操作被不同的对象接收时,可产生不同的动作或执行效果。作或执行效果。多态性允许在多个类(尤其是有继承关系)中定义同名的操多态性允许在多个类(尤其是有继承关系)中定义同名的操作,并在每一个类中有不同的实现。作,并在每一个类中有不同的实现。在C语言中,不能有同名的函数老大要收高利贷,对三个小弟说,给我去跟某某某收高利贷。三个小弟A,B,C听到了之后采取不同的行动 A:打电话过去威胁说不换就XXX(恐吓)B: 直接带家伙杀到他家楼下等(威逼) C:直接面谈,说还1万返回1百,下次再借,利率打折(利诱) 程序演示:简单的多态程序(程序演示:简单的多态程序(code/animal) class dog public string name; public int legs; public dog(string x,int y) name = x; legs = y; public void sound() Console.WriteLine(name+的叫声为:的叫声为:+汪汪汪汪); class cat public string name; public int legs; public cat(string x, int y) name = x; legs = y; public void sound() Console.WriteLine(name + 的叫声为:的叫声为: + 喵喵喵喵); class chick public string name; public int legs; public chick(string x, int y) name = x; legs = y; public void sound() Console.WriteLine(name + 的叫声为:的叫声为: + 咯咯达咯咯达); class Program static void Main(string args) dog dog1 = new dog(小狗小狗,4); cat cat1 = new cat(小猫小猫,4); chick chick1 = new chick(小鸡小鸡,2); dog1.sound(); cat1.sound(); chick1.sound(); 总结:面向对象编程的基本思路总结:面向对象编程的基本思路定义类定义类通过类创建对象通过类创建对象对象之间相互发送消息对象之间相互发送消息总结:面向对象方法是一种运用对象、类、继承、封总结:面向对象方法是一种运用对象、类、继承、封装、多态、消息等概念来构造系统的软件开发方法。装、多态、消息等概念来构造系统的软件开发方法。The End
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号