您的位置:首页 > 其它

阅读器:我的第一个面向对象程序 (正在学习面向对象程序设计)

2008-05-18 17:32 309 查看
1.1.1.1

1. 找出所需的类,找出所有的名词。

例子:您已经将几本书的文本内容下载到了计算机中。您想要选择其中的一本书,一次阅读其中的某一页。您还想要设置页面的长度。

2. 排除候选名词。排除一个候选名词的依据包括:

基于该名词的类只有属性或者只有方法

基于该名词的类与问题无关

基于该名词的类不代表一个对象

可以排除不相关的候选名词:计算机和次。(一页的)长度仅仅是个整数值,不会生成足够的行为来成为一个合格的类。文本内容也不能成为合格的类-唯一与他相关的事情就是他以一页的形式显示。基于同样的原因,页也不是一个类。这样就只剩下几本书和一本书,几本书是一本书的复数形式,所以可只保留book做为候选类

3. 找出隐藏类:

现在考虑名词几本书,实际上,另有一个类可代表基本书的属性和行为,可以把这个类命名为Library(书库)。Library的概念不同于Book的概念。一本书有一个书名和内容,能够阅读。一个书库则包含了许多本书,这些书可以被借阅和归还。经过排除,剩下了Book和Library这两个类,现在可以查找属性和方法了。

1.1.1.2 找出方法和属性

1. 阅读问题说明,找出所有的动词。可以不考虑是和有这样的助动词。同分析名词类似,对动词进行文本分析就是找出方法的起点。

2. 仔细考虑每一个动词。动词本身就是一个方法,还是它代表着一个方法?它与问题相关么?显然,下载和想要这两个动词是同问题相关的。选择是Library类的一个操作。在一个实际的书库中,该动作是与在书架上找到一本书并将它借出相对应。因此Library类有一个checkout方法。这里还有一个隐藏属性一本书要有一个书名。阅读是Book类的一个操作。这个方法允许您阅读书中的某一页,因此这个方法命名为GetPage。动词设置表明一个属性需要修改,而这个属性正是一页的长度PageLength。

3. 在确定类时您排除的名词实际上可能正是那些类的属性。

文本内容,(一页的)长度和页在确定类的时候都被排除了。一本书确实需要文本内容,因此文本内容就成为了书的一个属性。在考虑动词设置时您发现页面长度是一个属性。页代表文本内容的一部份,是GetPage操作的结果,因此它不是一个属性。

4. 查找遗漏的属性和方法。

如果要从书库中借书,需要一个方法将书加入库中并且还借出的书,可用checkin方法来完成这项工作。

1.1.1.3 测试类设计

您已经将几本书的文本内容下载到了计算机中。

有办法存储并组织几本书么?有,可以为每一本书创建一个Book对象,创建一个Library对象存储所有的书。

您想要选择其中的一本书,一次阅读其中的某一页。

可以选择其中的一本书,一次阅读其中的某一页么?可以,通过书名可选择与之对应的书,使用GetPage方法就可以检索其中某一页。

您还想要设置页面的长度。

可以设置一页的长度么?可以,Book类有一个PageLength属性。

最终的设计结果如下



属性

方法

Book

PageLength integer

Text string

Titil string

getPage(pageNumber)

Library

Check(Book)

Checkout(title)

用到的一个函数

SubString(参数1,参数2)参数1代表起始位,参数2代表取的字符长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: