第 1 部分 - 面向对象的分析和设计
1. 面向对象的思维
面向对象思维是面向对象建模的基础,这是本文的核心内容。它涉及通过将问题和概念分解为组成部分并将这些部分视为对象来理解问题和概念。
-
定义:面向对象思维意味着将各种元素视为离散的对象。例如,在软件系统中,一条推文、一个用户或一个产品都可以被视为对象。
-
属性和行为:
-
属性:对象的属性或特征(例如人名、年龄、身高)。
-
行为:对象可以执行的操作(例如,设备开机或关闭、用户登录)。
-
好处:
-
组织:对象封装了数据和行为,将相关的细节和功能保存在一起。
-
灵活性:可以独立于其他对象对对象的属性或行为进行更改。
-
可重用性:对象可以在程序的不同部分甚至不同程序中重用,减少需要编写和维护的代码量。
2. 软件流程设计
设计阶段在软件开发生命周期中至关重要。它确保最终产品满足用户要求并按预期运行。
-
软件开发过程:软件开发过程是迭代的,涉及几个关键阶段:
-
需求收集:了解客户或用户对软件的需求。
-
概念设计:开发高级设计轮廓和模型。
-
技术设计:为每个组件创建详细规格。
-
实现:根据设计编写实际代码。
-
测试:验证软件是否正常工作并满足要求。
-
部署:发布软件以供使用。
-
维护:持续更新和错误修复。
-
设计的重要性:跳过或不充分地解决设计阶段可能会导致项目失败。坚实的设计基础可确保软件开发在正确的轨道上开始,并降低以后进行代价高昂的变更的风险。
三、要求
需求收集是项目成功的基础。它涉及了解客户或用户对软件的需求。
-
定义:需求是软件必须满足的条件或功能。
-
启发:
-
客户访谈:与客户直接讨论,以了解他们的愿景和需求。
-
问卷和调查:从潜在用户或利益相关者收集结构化信息。
-
观察:观察用户如何与当前系统交互,以确定需求和痛点。
-
研讨会:与利益相关者举行协作会议,收集需求并确定优先级。
-
权衡:客户可能需要平衡不同的需求和限制。例如,他们可能需要在更多功能或更快交付之间进行选择。
示例:设计房屋时,建筑师通过询问有关房主对房间大小、布局和特定功能的偏好的详细问题来收集要求。这有助于防止施工过程中发生代价高昂的变更。
4. 设计
软件开发中的设计涉及创建指导实施阶段的概念和技术蓝图。
-
概念设计:
-
定义:软件主要组件及其职责的高级概述。
-
模型和线框图:在详细工作开始之前帮助利益相关者理解和批准设计的视觉表示。
-
职责:定义软件每个组件应该做什么。
-
示例:
-
模型:用户界面的视觉布局,显示屏幕的外观和功能。
-
线框图:显示组件布局的简单草图或图表,没有详细的设计元素。
-
重要性:确保所有利益相关者对软件的高级结构有清晰的理解和一致。
示例:在建造房屋时,概念设计概述了房间的总体布局及其连接,但尚未详细说明管道或布线。
-
技术设计:
-
定义:每个组件的详细规范,包括它们如何构建和交互。
-
技术图表:详细绘图显示组件如何组合在一起以及数据如何在它们之间流动。
-
组件分解:进一步将高级组件分解为更小的、可管理的部分,直到每个部分都可以实现。
-
示例:
-
类图:显示类的结构、属性、方法和关系。
-
序列图:说明对象如何在特定事件序列中交互。
-
组件图:描述组件之间的组织和依赖关系。
-
重要性:为开发人员提供有效编写代码所需的详细信息,并确保整个开发团队的一致性。
示例:在房屋建造中,技术设计指定了墙壁、地板和屋顶的确切材料,以及管道和电气系统的详细计划。
5. 需求和设计的妥协
在整个设计过程中,通常需要做出妥协,以平衡客户需求和项目限制。
-
沟通:与客户的持续反馈循环对于确保设计与他们的愿景和约束保持一致至关重要。
-
迭代审核:根据客户的意见定期审核和完善设计。
-
原型设计:构建组件的早期版本,以与客户一起测试和验证想法。
-
返工:如果不符合要求或证明不可行,概念设计和技术设计都可能需要修改。
-
灵活性:随着新信息的出现或需求的发展,对变化和调整持开放态度。
-
影响分析:评估变更对整个项目的潜在影响,以做出明智的决策。
示例:如果客户想要一个开放式厨房,但结构需要需要支撑梁,建筑师和客户必须找到一个折衷方案,既能保持结构完整性,又能满足客户的审美偏好。
6. 质量属性设计
设计软件涉及平衡各种质量属性,以满足功能和非功能要求。
-
质量属性:影响软件性能、可用性和可维护性的特征。
-
性能:软件执行任务的速度和效率。
-
安全性:为保护软件免受威胁和漏洞而采取的措施。
-
可扩展性:软件处理增加的负载或使用量的能力。
-
可维护性:软件更新或修改的容易程度。
-
可用性:用户学习和使用软件的难易程度。
-
权衡:平衡这些属性通常涉及权衡,因为优化一个属性可能会影响其他属性。
-
性能与安全性:增强安全措施有时会降低性能。
-
可扩展性与可用性:添加功能以提高可扩展性可能会使用户界面复杂化。
-
上下文:软件的特定上下文会影响这些属性的平衡方式。
-
关键系统:将可靠性和安全性置于其他属性之上。
-
消费类应用:强调可用性和性能,以提高用户满意度。
示例:设计前门时,平衡安全性(坚固的锁)和便利性(易于进入)至关重要。锁太多,门安全但不方便,锁太少,方便但不安全。
7. 班级责任合作者 (CRC) 卡
CRC 卡是一种用于在设计过程中识别和组织类、其职责和协作者的工具。
-
定义:CRC 卡有助于可视化和组织不同类的职责以及它们之间的交互方式。
-
类:代表系统中的一个对象或概念。
-
职责:定义类知道什么和做什么。
-
协作者:与该类交互的其他类。
-
用法:
-
头脑风暴:帮助团队集思广益并确定必要的类及其角色。
-
设计会议:促进有关班级职责和交互的讨论。
-
文档:用作捕获设计决策的文档工具。
-
流程:
-
识别类:列出系统中涉及的所有潜在类。
-
定义职责:写下每个类的主要职责。
-
识别协作者:确定每个类需要与哪些类交互以履行其职责。
-
好处:
-
清晰度:提供清晰简洁的方式来组织和传达设计理念。
-
灵活性:随着设计的发展,易于更新和修改。
-
协作:通过轻松讨论和完善设计决策来增强团队协作。
示例:在银行应用程序中,“帐户”类的 CRC 卡可能会列出“管理余额”和“跟踪交易”等职责,以及“客户”和“交易”类等协作者.
8. 原型设计和仿真
原型设计和模拟技术用于在流程的早期测试和完善设计,有助于在全面开发之前识别和解决问题。
-
原型制作:
-
低保真原型:软件或特定组件的简单、粗糙版本,通常使用纸张或基本数字工具创建。
-
高保真原型:与最终产品非常相似的更详细和交互式版本。
-
目的:验证设计概念、收集用户反馈并识别可用性问题。
-
方法:
-
纸质原型:创建用户界面和交互的手绘草图。
-
数字原型:使用软件工具创建交互式模型和模拟。
-
模拟:
-
定义:运行模型来测试设计在各种条件下的行为和性能。
-
用例:评估系统性能、负载测试和验证设计决策。
-
好处:
-
早期验证:在全面开发之前识别潜在问题。
-
具有成本效益:通过及早解决问题来降低代价高昂的变更风险。
-
用户反馈:允许用户与原型交互并提供有关功能和可用性的反馈。
-
工具:各种软件工具和平台可用于创建原型和运行模拟。
示例:在最终确定房屋设计之前,建筑师可能会构建一个小型模型或使用软件模拟来可视化布局并识别空间利用和设计的潜在问题。
以上是面向对象设计注意事项|部分-的详细内容。更多信息请关注PHP中文网其他相关文章!