990 likes | 1.2k Views
第一讲 Java 概述与面向对象基础. 内容提要. 软件与编程 什么是 Java Java 的历史 Java 的特点 Java 相关的概念 面向对象概念 Java 与面向对象. 1. 软件与编程. 1.1 软件历史. 1821 年,英国数学家 C. Babbage ( 1791-1871 )设计了差分机,这是第一台可自动进行数学变换的机器,因此他被称为 “ 计算之父 ” 。此后,他又设计了能够处理数学公式的分析机。然而,这两种机器都没有真正实现。
E N D
内容提要 • 软件与编程 • 什么是Java • Java的历史 • Java的特点 • Java相关的概念 • 面向对象概念 • Java与面向对象
1.1 软件历史 • 1821年,英国数学家C. Babbage(1791-1871)设计了差分机,这是第一台可自动进行数学变换的机器,因此他被称为“计算之父”。此后,他又设计了能够处理数学公式的分析机。然而,这两种机器都没有真正实现。 • Ada Lovelace(1815-1852)为 Babbage 的分析机设计了程序,被称为“第一位程序员”。
Grace Hopper于1943年参加美国海军,并参与了Mark 1的研制工作;1946年为UNIVAC 1开发了第一个高级语言编译程序;1959年开发了第一个面向商业信息处理的语言COBOL的编译程序;于1973年和1985年分别晋升为美国海军上校与海军少将。 • Hopper是第一位发现并排除了程序错误(bugs)的人。此后,人们把发现和排除程序错误的过程称为 debugging,把这样的软件工具称为 debuger.
1.2 软件的社会地位 • 计算无所不在,软件无所不在 • 软件不仅仅是在计算机上运行的程序 • 对于客观世界的认识,和对问题求解的思维与模式. 它把现代科学研究和工程问题求解嵌入在各种类型的系统中,是现代产品和服务的关键因素 • 软件的应用领域 • 商业、金融、交通、医疗、电信、军事、工业生产过程、娱乐、办公 … • 系统软件,实时软件,商业软件,工程和科学计算软件,嵌入式软件,个人计算机软件,基于Web的软件(网站),人工智能软件 …
2.1 Java是什么 • 由Sun Microsystems(James Gosling)开发 • 是一种通用的编程语言 • 基于C/C++ • 针对Web/Internet应用 • 广泛应用
Java powers more than 4.5 billion devices including: • 800 million PCs • 1.5 billion mobile phones and other handheld devices (source: Ovum) • 2.2 billion smart cards • Set-top boxes, printers, Web cams, games, car navigation systems, lottery terminals, medical devices, parking payment stations, and more.
2.2 另外的角度看Java • 是一门编程语言: Java是SUN公司开发的源于Internet的一种现代程序设计语言。多年来,SUN公司对Java产品不断改进升级,使之紧跟时代步伐,满足了日益复杂的软件开发需求。 • 是一种体系架构 • 是一种思考方式 • 是一个运行环境
Java的起源 • Java是Sun公司1995年正式推出的新一代面向对象程序设计语言, 特别适合于Internet应用程序开发, 其平台无关性直接威胁到Wintel 的垄断地位。 • Java来自于1991年Sun公司的一个叫Green的项目, 其原先的目的是为家用消费电子产品开发一个分布式代码系统, 可以把E-mail发给电冰箱、 电视机等家用电器, 对它们进行控制。开始, 准备采用C++, 但C++太复杂, 安全性差, 最后基于C++开发了一种新的语言Oak(Java的前身), Oak是一种用于网络的精巧而安全的语言。 • 1994年下半年, Internet的快速发展, 促进了Java语言研制的进展, Green项目组成员用Java编制了HotJava 浏览器, 触发了Java进军Internet,使得它逐渐成为Internet上受欢迎的开发与编程语言,现已发展成为一种重要的Internet平台。
4.1 优点 • 简单 • 风格类似于C++, 基本语法与C语言类似; • 摒弃了C++中容易引发程序错误的地方, 如指针和内存管理; • 提供了丰富的类库。 • 面向对象 • 面向对象:支持静态和动态风格的代码继承及重用,是完全面向对象的, 它不支持类似C语言那样的面向过程 的程序设计技术。
解释执行 • Java编译器产生字节码,而不是机器代码 • 产生的字节码是平台无关的 • Java字节码在执行时被翻译成机器可读的指令 (Java Virtual Machine) • 解释执行:Java解释器(运行系统)能直接运行目标代码指令
可移植 • 一个应用到处运行 • 原始数据类型大小在各个机器上都是一样的 • 库定义了可移植的接口 • 平台无关:Java源程序被编译成一种高层次的与机器无关的 byte-code格式语言, 被设计在Java虚拟机上运行
可靠 • Java致力于检查程序在编译和运行时的错误 • 类型检查帮助检查出许多开发早期出现的错误 • Java自已操纵内存减少了内存出错的可能性 • Java还实现了真数组, 避免了覆盖数据的可能 • 安全 • 安全:Java的安全性可从两个方面得到保证。一方面, 在Java语言里, 象指针和释放内存等C++功能被删除, 避免了非法内存操作。 另一方面, 当Java用来创建浏览器时, 语言功能和一些浏览器本身提供的功能结合起来, 使它更安全。
多线程 • 多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的好处是可以有更好的交互性能和实时控制性能。 • 动态性 • 动态:Java的动态特性是其面向对象设计方法的拓展,它允许程序动态地装入运行过程中所需要的类。
4.2 缺点 • 比编译型语言,例如C来得慢 • 1999年做的一个试验,说明Java比C或者C++要慢3到4 倍 title of the article: “Comparing Java vs. C/C++ Efficiency Issues to Interpersonal Issues” (Lutz Prechelt) • adequate for all but the most time-intensive programs
与Java相关的几个常见名词 • Java Application ( Java应用程序): 用Java语言编写的通过独立的Java解释器来解释运行的桌面应用程序(类似于其它高级语言编制的应用程序)。 • Java Applets (Java小程序): 用Java语言编写的、嵌入在HTML编写的Web页面中的非独立程序,由Web浏览器内部包含的Java解释器来解释运行,是动态、安全、跨平台的网络应用程序。 • JSP (JavaServer Pages, Java 服务器页): 是一种实现普通静态HTML和动态HTML混合编码的技术,是在Sun公司倡导及多个公司参与下共同建立的一种动态网页标准,实现了Web动态内容与其显示的分离,用于构建动态Web网站,JSP文件运行于服务器端,
J2EE—— Java 2 Platform, Enterprise Edition (Java 2企业版) • J2EE首先是一种构架,它包罗了Java的多种先进的技术,最合适使用MVC的方法来构建系统,其表现层使用JSP,控制层可以使用Servlet或Session Bean,用于实现业务逻辑,Entity Bean则对业务实体进行抽象。此外它还使用JAAS(Java验证和授权API )实现安全机制,JNDI用于查询资源,JDBC和JTA访问数据库和管理事务;JMS实现企业的消息处理;JavaMail实现与企业外界的联系。
J2SE——Java 2 Platform, Standard Edition (Java 2标准版),是Java最核心的技术 • J2ME——Java 2 Platform, Micro Edition (Java 2袖珍版), 是一个重要的用于无线方面的 Java 平台,它从可移植的、以网络为中心的 Java 虚拟机转变而来。 • JVM——Java Virtual Machine (Java虚拟机),它通过采用一种被称之为Java虚拟机的虚拟微处理器的规范,用软件在计算机芯片内模拟出一个假芯片,然后开始运行程序,为Java程序提供统一的脱离软、硬件平台的运行环境。
JDK——Java Development Kit (Java开发工具包),由Sun公司免费发行的,JDK有多个版本,大体经历过1.02、1.1.x、1.2、1.3、1.4、1.5、1.6几个系列 • JSDK——Java Server Development Kit (Java服务器开发工具包),是JDK 的一个典型的扩展工具包。 • JDBC——Java DataBase Connectivity(Java数据库连接),是一种用于执行SQL语句的Java API(应用程序接口),可以为多种关系数据库提供统一访问,是由一组用Java语言编写的类和接口组成。
Applet——Java Applet 是用 Java 语言编写的、包含在网页里的“小 应用程序”,通常被放在 Web 服务器上。当有人上网浏览时,Applet 随网页一起 下载到客户端的浏览器中,并借助浏览器中的 Java 虚拟机(JVM)运行工作。 • Servlet ——Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 Servlet与Jsp之间的交互为开发Web服务提供了优秀的解决方案。
Swing与 AWT(抽象窗口工具包)——是Java设计 GUI (图形用户界面)的基础 。 • AWT设计有严重缺陷,不能满足发展的需要 • Swing是在AWT基础上发展起来的,为Java GUI编程提供了强大丰富的API和灵活的结构设计,提供了替代AWT重量组件的轻量组件,Swing 中大部分是轻量级组件。Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。二者最好不要混用。
与Java相关的几个常见名词 • EJB(Enterprise JavaBeans)--J2EE核心组件,EJB并不是一个产品。它是Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。
历史回眸 • 开发模式 • 传统方法学 • 面向对象方法学 • 面向对象基本概念 • 对象组成 • 面向对象分析/设计/编程
6.1 历史回眸 • 现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型。 随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克) • 它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发(如果可以称之为软件开发的话)与现在的大不相同。为了算一道题,要有人事先把完成加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解开来,根据新的要求重新搭建,效率极低(与现在比)。
现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的思想。 1946年他和他的同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想,这样,当算一道新题时就只需采取改变计算机中的程序的“软”的方法。 • 英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了“艾克萨克” 。 • 因此,现在的计算机通常被称为冯.诺依曼计算机。
早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。 • 据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力都等价于图灵机。 已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,它的计算能力即相当于图灵机。 这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。
由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算机语言也不过都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问题域的形式化的过程。 • 程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入计算机里进行计算。
最早的高级语言大约诞生于1945年,是德国人楚译为他的Z-4计算机设计的Plan Calcul,比第一台电子计算机还早几个月;在电子计算机上实现的第一个高级语言是美国尤尼法克公司于1952年研制成功的Short Code;而真正得到推广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在IBM公司的计算机上实现的FORTRAN语言。
早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60。计算机进入商业和行政管理领域以后,出现了COBOL和 RPG等便于商界使用的语言。 • 这类语言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(Rapid Application Development)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如Powerbuilder,Delphi,VB等。
前一类应用于科学和工程计算的大型语言相对来说更为基础,因而也更为灵活,应用范围更为广泛。 在FORTRAN,BASIC(学习型)之后,自70年代以来,模块特征更明显,简单易用,可靠性强的PASCAL异军突起,在世界范围内广泛流行。 但进入80年代以后,它的地位又逐渐为更实用的C语言替代。 到现在,C语言的地位已相当于一种“高级汇编语言”了。
90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,“网络就是计算机”,新的语言不仅要是OO的,Visual的,更要是基于WEB的。 Java语言借INTERNET的东风,横空出世,一夜红遍天下。 • 上述这些变化,表面是不同的编程工具的流行,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?
6.2 开发模式(Paradigm) • 开发模式又称为范型、范例、风范或模式(Pattern)。开发模式定义了 • 特定问题和应用的开发过程中将遵循的步骤; • 确定将用于表示问题和解的那些成分的类型; • 利用这些成分表示与问题解决有关的抽象; • 直接得到问题的结构。
开发模式的选择影响到整个软件开发生存期。就是说,它支配选择:开发模式的选择影响到整个软件开发生存期。就是说,它支配选择: • 设计方法 • 编码语言 • 测试和检验技术
6.3 传统方法学 • 传统方法学:瀑布模型,结构化分析/设计/编码 • 瀑布模型的缺点:僵化 • 瀑布模型要求:生命周期各阶段间遵守严格的顺序,实际情况是:软件开发往往在反复实践中完成 • 瀑布模型要求:预先定义并“冻结”软件需求,实际情况是:某些系统的需求的一个逐渐明确的过程,且预先定义的需求到软件完成时可能已经过时
SA - SD - SP 技术的缺点: • 本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好 • 系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改 • 数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差