问题描述
1.面向过程的系统分析与设计存在的问题是什么?通过什么OO技术来解决?2.请画图说明面向对象系统的基本构造。3.面向对象的分析和设计各解决什么问题?怎样从分析向设计转换?4.面向对象开发分几个阶段,各完成什么任务?5.请解释概念封装和多态,并说明封装和多态的作用。6.对象的生命周期是什么意思?在程序中如何正确声明和使用对象的实例?7.描述编程中消息、方法、属性之间的关系。8.属性分几种,其作用是什么?请描述属性的定义过程。9.对象关系有什么性质,存在几种关系?
解决方案
解决方案二:
不知道你们学的教材是多少年前写出来的,我也没有看过这些年的大学教材,所以无法估计你们的课程习题需要什么答案。一般来说,学校里的教育是“填鸭式”的,学校里的考试都是“摆着”让你们抄书的,专门考学生有没有在最近的课程上把书背下来(或者理解下来),所以不管学校外边的现实是什么,学校的练习题和考试还是要以书本上写的为准。但是软件工程书籍往往落后于现实15年,不仅仅是现在的软件工程的书如此,我们以前学的教材也是这样的。因为其实工程技术是尖端的最高级的艺术,无法单纯地死记硬背的。我这按照实用的角度给你说明一下主要的(个别的)要点。面向过程式的软件工程,存在了20年左右,在我们学习面向过程的系统工程课程时都做过不少的SA、SD分析练习。而面向对象的软降工程,到现在也存在了将近20年了。大概15年前MartinFlower提出了“面向对象系统的5原则”,经常被引用。实际上面向对象技术成为非常系统化的技术,在20年前就有了,例如OMT技术就是其代表作,已经非常现代和准确地反映了面向对象系统的分析与设计技术。后来者不过是不断补充了一些教学素材,修改一些商业化工具,制定一些越来越繁冗的“标准”(例如UML虽然非常有用,但是只有5%是真正需要的)。而大概在15年前,实际上软件工程是以敏捷为代表的,例如“极限编程”技术就是一种非常强调高强度产品发布质量的技术,这些几乎全都是站在面向对象系统分析和设计技术的肩膀上,这些敏捷开发理论无不是对系统的“扩展、重构”的诠释。面向对象技术出现时,将所有的研究对象都赋予了“接口扩展、多态”的特性。比如说你画一个复杂系统的SA、SD“设计图,再也不需要死抠字眼了,而是可以分成多个层次来画,扩展的层次可以继承父层次与外界的耦合的接口。不论是流程图、模块划分、项目进度规划、等等,都无一例外地包括了分层扩展的概念。以前的面向过程的软件工程,大量的八股文式的“这个性、那个性”的定性要求,但是由于它只是强调“自顶向下功能分解”的SA方法,以及非常低级和面向计算机领域的(而不是面向自然应用领域的)SD方法,造成它开发的系统经常在开发后期“推倒重来”。实际上,面向对象系统分析和技术如果究其实质,也很简单,就是在所有模块的分析和设计工程蓝图上都要引入分层扩展的技术。一句话就说“完”了。
解决方案三:
關于你們的習題中“請畫圖說明面向對象系統的基本構造”這個問題,我實在不知道你們的書上要什麽樣的圖畫,所以就不寫了。因爲如果一個平面圖來畫的,很可能容易去堆砌那些面向過程的軟件工程裏的東西似乎更省事兒,更可以讓軟件開發的外行看明白,但是這種圖堆砌出來可能就是誤導你。這類問題由于看不出在問什麽,所以也就不回答了。至于說“分析和設計各解決什麽問題”的問題,其實這比較容易回答。分析和設計有很大很大的重疊性的,甚至在叠代式開發中反複交替執行。所以先不要用死板的方式來看到其“區別”問題。分析的目標是讓所有的設計師(包括完全不會編程的業務流程設計師)看懂,雖然分析中也大量地用了形式化的符號,但是它極少涉及只有計算機領域采用的術語。而進行設計,就是針對CPU調度、內存使用、鍵盤驅動還是圖形驅動、事件冒泡或者下沈的機制、軟件的打包和部署安裝、不同類型數據庫的使用,等等問題進行具體化,文檔化(但是不是濫寫文檔,因爲面向對象特別是敏捷的面像對象強調的是持續發布、不斷重構和叠代,濫寫文檔而不廢棄文檔會阻礙系統發展)。在設計階段,強調的是要與分析保持一致。這個階段,初學者最應該知道的一件事,就是許多口口聲聲“面向對象設計”的人,其實一旦寫代碼就成了結構化的了,其代碼設計的樣子跟當初的分析風格完全不一致。“面向對象開發分成哪些階段”,我覺得你找你們的書去回答就行了,或者照著UML的入門書所講的去回答就行了。其實這些東西往往描述得相當地冗長,但是用來訓練初學者也許是好的。封裝和多態的概念,以及其它的問題基本上也一樣是非常單純,根據你們的書回答。對象都是有生命周期的。比如說一個“車子”對象有四個”門“,那麽車子對象被銷毀時,四個門自然也被銷毀了。于是在對象實例化時和銷毀之前,總是要做一些行爲的。這需要在分析和設計中體現。