也不知道是不是该放到这个区。
大家先看看吧。
今天,年轻的同事又来问我一个日志分析程序的设计。
帮他把程序由原来的每种格式需要写一段代码,改成了根据配置,调用不同的Parser实例进行处理的程序。
使我想起了一直困扰我的一个问题,什么是对象?
刚接触到面向对象,是看c++的书,第一句话,对象是对实际事物的抽象,从此陷入万劫不复之境地。
反而无法正确的面向对象设计。
直至工作一段时间,看别人的程序,自己写,使用设计模式。
到今天,可以用OO的设计简化代码,并给程序带来简单扩展性时,再回头来看,这个定义是一个极大陷阱。
(下面才开始我的想法,呵呵,写点铺垫)
OO里,从语言上来讲一个Object是一堆成员变量和方法的结合体。
从我的程序设计经验来讲,对象并不仅仅是对事物的抽象。
中学在电脑班学习数据结构的时候,对一句话印象深刻:
数据结构+算法 才是完整的算法
借鉴这个说法,对象是同时对事物和行为的抽象。
对事物的抽象
简单事物(pojo)
有关联的多个事物
事物之间的关联
对行为的抽象
独立行为,简单行为,比如string的trim操作。
上下文相关行为,根据环境不同,输入的参数会导致不同的结果。
条件行为,输入的参数包含数据和条件,根据条件不同导致会导致行为不同。
以我同事的那个项目为例,原有的设计是:
读入一行日志
分解成多个日志项,每一个项有一个格式名称
对于incoming log进行进行日志的解析
对于page_visit_log进行日志的解析
生成incoming log的sql,插入数据库,
生成page_visit_log的sql,插入数据库
每种日志项的格式有所不同,所以需要以名称标识,总共有13种日志。
所以类似的代码要写13次。
即使使用过程方式,也要在过程内部写13种case,而且由于代码不在一起,维护更麻烦。
如果用对象抽象:
数据抽象
--日志格式 (日志格式主要是列的名称定义)
行为抽象
--根据日志格式进行解析(条件行为)
--根据日志格式生成sql,为了性能,需要同种的日志能够叠加后批量插入
按照这样的描述,我们可以以日志格式作为构造的参数设计Parser类。
class Parser {
构造函数:日志格式名称 {
根据名称读入相关的格式
}
日志解析:日志项 {
}
生成sql: 解析后结果 {
}
}
嗯,早上来了,继续编辑。
不过我的意见是,对初学者不要考虑太多理论上的东西,实际多尝试用设计模式解决问题后再来
自己体会比较好。
分享到:
相关推荐
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的理念,为开发者提供了一种高效、可维护的编程模型。在Java语言中,面向对象的特性主要包括封装、继承和多态性。耿祥义和张跃平编著...
《VC++面向对象与可视化程序设计(第三版)》是由黄维通编著的一本经典教材,主要针对C++编程语言在Visual C++环境下的应用,特别是面向对象编程和可视化程序设计。这本书深入浅出地介绍了C++的核心概念,包括类、...
C++是一种强大的面向对象编程语言,它包含了丰富的特性和概念,包括类、对象、封装、继承、多态等。在C++中,数据类型分为基本类型和复合类型,其中`char`、`int`和`long`是基本类型,可以使用`signed`修饰符来指定...
本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言...
在“面向对象练习进阶”中,你可能会看到如何创建和使用类、如何定义和调用方法、如何利用构造函数初始化对象、如何理解和运用继承、以及如何处理多态场景的实例。同时,文件可能涵盖接口的应用、访问修饰符的使用、...
### Java面向对象笔试知识点解析 #### 一、判断题知识点详解 1. **Java程序里,创建新的类对象使用关键字new。** 正确。`new`关键字用于实例化一个类,创建一个对象。当使用`new`时,会调用类的构造函数,分配...
2. 继承允许子类继承父类的属性和方法,子类可以扩展或重定义父类的功能,实现代码的复用。在Java中,子类通过`extends`关键字声明继承父类。 3. 多态则是允许子类覆盖或重写父类的方法,使得在父类引用指向子类...
Java面向对象编程是Java语言的核心特性,也是其强大的原因。孙卫琴老师的“java面向对象配套源代码”为初学者提供了深入理解这一概念的宝贵资源。面向对象编程(Object-Oriented Programming,简称OOP)是一种编程...
### Python面向对象程序设计之定义与继承 #### 一、面向对象编程简介 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”来设计软件。在Python中,几乎一切都是对象,包括数字、字符...
2. C++的继承性(C)允许派生类继承基类的所有特性,并且可以增加新的特性或重定义基类的特性。这使得代码复用和类层次结构的构建成为可能。 3. 在C++中,封装(B)是通过类来实现的,类可以隐藏内部实现细节,仅...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的函数封装在一起形成对象,来组织和管理程序。Python 是一种支持OOP的语言,它提供了丰富的语法结构来实现面向...
C++是一种面向对象的编程语言,它支持类、对象、构造函数、析构函数、重载函数、内联函数、虚函数、静态成员、模板等特性。以下是对题目中涉及知识点的详细解释: 1. **构造函数与析构函数**: - 构造函数是用于...
C++是一种支持面向对象编程(OOP)的高级编程语言,其主要特点包括封装、继承和多态。在本模拟试题中,涉及了C++的一些核心概念和特性,以下是相关知识点的详细说明: 1. 构造函数和析构函数: - 构造函数用于在...
面向对象是C++编程的核心概念,包括抽象、封装、继承和多态这四大特性。抽象允许我们定义复杂系统的模型,通过定义接口和实现细节来隐藏内部工作。封装是将数据和操作这些数据的方法绑定在一起,确保数据的安全性。...
从给定的文件信息来看,文档主要探讨了PHP5中面向对象编程的高级特性,特别是接口和多态的概念。以下是对这些概念的深入解析: ### 接口的定义与规范 接口在PHP5中被定义为一个特殊类型的抽象类,其中仅包含抽象...
**原则一:** 面向对象设计应该关注于清晰地定义类及其责任。这意味着每个类都应该有明确的目的,并且只负责执行那些与之直接相关的任务。 **原则二:** 在面向对象设计中,尽量减少类之间的耦合度是非常重要的。类...
面向对象的程序设计是计算机科学中的核心概念,主要涉及类、对象、封装、继承、多态等核心概念。在这个15秋东财《面向对象的程序设计》在线作业中,涵盖了Java编程语言的基础知识,包括异常处理、类与对象、字符串...