面向对象应用框架 01

什么是面向对象的应用框架? (What is an Object Oriented Application Framework)

  • 框架 (Framework) 是一种可以被定制的半成品应用程序。
    • 重用主体,重写它调用的代码 (Re-use the body, re-write the code it calls)
  • 优点 (Benefits):
    • 模块化 (Modularity)
    • 可扩展性 (Extensibility)
    • 依赖注入 (Dependency injection) (即控制反转 (inversion of control))
      • 对象在创建时由某个外部实体赋予其依赖关系,而不是自己选择它要协作的对象。
      • 松耦合 (Loose coupling): 独立地测试和添加对象。
    • 减少开发时间 (Reduced development time) (需要有经验)

为什么使用面向对象的应用框架? (Why use Object Oriented Application Frameworks)

  • 计算能力已显著增长。
  • 软件设计昂贵且易于出错。
  • 许多核心概念可以被重用。

应用框架的弱点 (Weaknesses of Application Frameworks)

  • 可扩展的软件更难开发。
  • 学习框架需要时间。
  • 可能需要集成多个框架。
  • 必须能够使代码适应新的框架。
  • 调试可能更困难。
    • 很难区分框架的 bug 和自己代码的 bug
    • 由于控制反转,单步调试代码可能很困难
  • 性能下降 (Performance degradation)。

框架只有在代码质量好的情况下才有帮助 (Frameworks only help with good code)

  • 框架本质上是设计重用 (design re-use) 的一种形式。
  • 理想情况下,你也应该使用:
    • 组件 (Components) (可重用的代码)
    • 设计模式 (Design patterns) (软件代码的常规形式)

软件工程 (Software Engineering)

软件工程 (Software engineering) 是一种基于工程学方法的软件开发方式。软件工程师是运用工程设计流程来设计、开发、维护、测试和评估计算机软件的人。术语“程序员 (programmer)” 有时被用作同义词,但它可能更侧重于实现而非设计,并且可能不具备工程教育或技能的内涵。

工程技术 (Engineering techniques) 用于指导软件开发过程,该过程涉及软件生命周期过程本身的定义、实现、评估、测量、管理、变更和改进。它大量使用软件配置管理 (software configuration management),即系统地控制配置变更,并在整个系统生命周期中维护配置和代码的完整性和可追溯性。现代流程使用软件版本控制 (software versioning)

软件危机 (Software Crisis)

术语 “软件危机 (Software Crisis)” 是为了描述 20 世纪 60 年代末和 70 年代计算机系统开始变得越来越大、越来越复杂时所面临的挑战。这些挑战使得以可预测、高效和可靠的方式开发和维护软件变得非常困难。

软件危机的主要方面包括:

  • 项目超出时间和预算 (Project Running Over Time and Budget)
  • 软件质量差 (Poor Quality Software)
  • 软件难以维护 (Software was Hard to Maintain)
  • 复杂性 (Complexity)
  • 缺乏熟练的程序员 (Lack of Skilled Programmers)
  • 需求变更 (Requirements Change)

主要目标 (Main Objective)

软件工程的主要目标是及时设计、开发和交付可靠、有效、易懂、可维护、可重用、适应性强和可移植的软件产品。

  • 可靠 (Reliable): 软件应在指定条件下正确、一致地运行。
  • 有效 (Effective): 软件应满足用户需求并有效地提供预期的功能。
  • 易懂 (Understandable): 软件应是用户友好的,具有直观的界面和清晰的说明,以便用户可以轻松理解如何使用它。
  • 可维护 (Maintainable): 软件应易于修改和更新。这包括修复错误、添加新功能以及适应环境变化。
  • 可重用 (Reusable): 软件的部分设计应能被应用程序的不同部分或其他应用程序重用。这可以显著加快开发过程。
  • 适应性强 (Adaptable): 软件应足够灵活以适应变化。这可能是用户需求的变化、硬件或软件环境的变化,或系统其他部分的变化。
  • 可移植 (Portable): 软件应能在不同的硬件平台和操作系统上运行,或者应该相对容易地将其移植到新环境中。
  • 可追溯 (Traceable): 软件产物 (artifacts) 的来源应能追溯到其需求和设计。这有助于理解某些设计决策的理由,并有助于维护和演进软件。
  • 满足用户的最终需求 (Meets User’s Final Needs): 最重要的是,软件应满足其用户的需求。这需要深入理解用户需求,并致力于实现用户满意。

软件工程基础 (Fundamentals of Software Engineering)

软件工程的基础为以系统化、规范化和高效的方式开发软件提供了一个框架。这些基础涵盖了广泛的主题,包括软件开发生命周期、软件设计原则、软件测试、项目管理等。

  • 软件开发生命周期 (Software Development Life Cycle, SDLC)
  • 需求分析 (Requirements Analysis)
  • 软件设计与架构 (Software Design and Architecture)
  • 软件编码与实现 (Software Coding and Implementation)
  • 软件测试 (Software Testing)
  • 维护 (Maintenance)
  • 项目管理 (Project Management)
  • 软件质量保证 (Software Quality Assurance)
  • 软件文档 (Software Documentation)
  • 软件过程与方法论 (Software Process and Methodologies)
0%