最近在和朋友做一个小的系统,对系统进行设计时与朋友的理念有所冲突,于是乎就想起了一个老问题,那就是正方形与长方形的继承问题。
OO可以说是现实世界在计算机世界的一个映射,而对于正/长方形,实际上是对正/长方形数学定义在计算机的一个映射的问题。
首先我们来看看在现实中,长方形的定义:
有一个直角的平行四边形是长方形。
再来看看判定定理:
定理1:有三个角是直角的四边形是长方形。
定理2:对角线相等的平行四边形是长方形。
以上就是长方形在现实中的定义以及判定定理。以此来看,正方形完全符合以上定义以及判定定理,所以可以得出正方形就是长方形,是它的一种特例。
在阎宏博士所学的《java与模式》一书里的观点是反对正方形是长方形的子类的,同时他写了一个例子出来:
public void resize(Rectangle r){
while(r.getHeight()<r.getWidth()){
r.setWidth(r.getWidth()+1);
}
}
这个例子是长方形的一个方法,用来不断增加长方形宽度,当宽度超过长度就停止增长,当传入对象是正方形的时候,这个方法就无用武之地(修改)。对于这一点,我的反驳很简单,是谁规定了长方形的边长必然是一个长一个宽呢?在现实的定义和判定定理中,并没有这一条吧。我记得在以前读书的时候,就有过一道判断题:长方形的长一定比宽的长度长。这道题目的答案就是错的。而在这里,阎宏博士通过一个自己定义实现的方法来扭曲现实中的定义,这一点已经明显违反了OO设计的根本,那就是客观的反映现实世界。
以上说了那么多,实际上我想说的是,在进行对象设计的时候,我们要把握好一点,那就是客观的反映现实的世界,当然要做到非常准确是很难,至少在现实对象有明确定义之时,我们不应该主观的加上自己的定义实现,让实现与现实产生分歧。
分享到:
相关推荐
### SAP ABAP OO 实现 ALV 的方法与实践 #### 一、背景介绍 在SAP ABAP领域中,ALV(Application List Viewer)是一种常用的技术,用于展示表格形式的数据。传统的ALV实现方式通常采用面向过程的方法,通过调用标准...
"SAP ABAP OO实现ALV框可编辑" 在SAP ABAP中,实现ALV框的可编辑功能是非常重要的。本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要...
在本实例中,我们将深入探讨如何使用Object Oriented for Oracle (OO4O)库和Microsoft Visual C++ 6.0(或Visual Studio .NET)来实现对Oracle数据库的C++编程操作。OO4O库是Oracle公司提供的一个接口,允许开发者...
OO ALV技术可以满足大多数ALV需求,但有时需要与后续的屏幕开发等集中在一个屏幕中,或者需要实现一些函数ALV不可实现的事件等。 OO ALV技术的实现方式是通过调用cl_gui_alv_grid类的方法set_table_for_first_...
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数
这些代码片段涉及了OOALV创建和初始化的过程,以及一些配置字段目录和表格显示设置的实现。例如,“g_alv_grid”是一个OOALV对象的引用类型,而“g_it_show”是一个与之关联的内表。代码片段中展示了如何通过SQL查询...
5. 事件驱动与灵活性:ABAP OO易于实现事件驱动编程,调用者和被调用者之间的关系更加松散,增强了程序的灵活性。相比之下,面向过程的程序执行流程往往是预定义的,不易调整。 6. 明确性与易用性:ABAP OO的执行...
OO ALV技术的优点是可以满足更多的报表需求,例如需要与后续的屏幕开发等集中在一个屏幕中,或者需要实现一些函数ALV不可实现的事件等。同时,OO ALV技术也可以与标准函数REUSE_ALV_GRID_DISPLAY和REUSE_ALV_GRID_...
在C/S架构的GIS系统中,如果服务器端使用Oracle 10g数据库,客户端应用使用MapX,通过OO4O实现Oracle 10g的空间操作,可以极大地扩展MapX的功能。例如,可以执行更复杂的空间查询,如缓冲区分析、网络分析等,这些在...
**ALV GRID CONTROL (ALV 网格控制器)** 是实现精美屏幕显示的关键组件,它利用控制器技术并通过系统的全局类方法响应各种操作事件。 ##### 控制结构概述 - **字段目录 (Field Catalog)**:用于控制 ALV 显示的...
OO方法,全称为面向对象的方法,是一种以对象为中心的软件开发方法论,它结合了数据和操作这些数据的函数,通过抽象、封装、模块化和分层等原则,以提高软件的可维护性和复用性。面向对象分析(OOA)和面向对象设计...
OO4O库提供了与Oracle数据库交互的接口,允许开发者在VB环境中直接操作Oracle Spatial对象,进行数据的读取、写入和更新。通过OO4O,VB程序员可以方便地在应用程序中实现空间数据的访问和管理。 【访问过程】 使用...
一、Oracle Objects for OLE (OO4O): 开启数据库与OLE应用的桥梁 Oracle Objects for OLE (OO4O)是Oracle公司专为OLE(Object Linking and Embedding)开发者设计的服务器对象编程模型。该模型允许开发人员在OLE...
实战OO_用例建模 实战OO_用例建模 实战OO_用例建模
综上所述,《实战OO》这本书全面覆盖了面向对象设计的各个环节,从需求分析到系统实现,再到部署实施,对于提升开发者在OO领域的专业技能具有极高的价值。通过阅读和学习,读者可以更好地掌握类图的绘制、设计模式的...
- **OO4O**:在性能上优于通用技术,开发简便,是介于OCI与ADO/ODBC之间的一种选择。 #### OO4O简介 OO4O是一种专门为Oracle数据库设计的快捷访问接口,它支持Microsoft公司的COM Automation and ActiveX技术,...
10. **集成到SAP GUI**:OOALV不仅可以独立使用,还可以与SAP GUI的其他组件结合,如对话框、表单等,为用户提供统一的界面体验。 通过本课程的学习,你将掌握如何利用OOALV来创建功能强大的数据展示界面,提高SAP...
### OO设计原则 -- OO设计的 DIP依赖倒置原则 #### 概述 在软件工程领域,特别是面向对象设计中,依赖倒置原则(Dependency Inversion Principle, DIP)是六大设计原则之一,由著名软件架构师Robert C. Martin提出...
本话题将深入探讨“通用分页实现及其OO设计”,结合给定的“Paginaction.jsp”文件,我们可以进一步了解在Java Web开发中如何有效地实现分页功能。 首先,我们需要理解分页的基本概念。分页是将大量数据分割成多个...