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

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代表取的字符长度。

转载于:https://www.cnblogs.com/figo-10/archive/2008/05/18/1202052.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值