单一职责原则来源: 定义:单一职责就是一个类负责一项职责.就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。 所谓职责,我们可以理解为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。
里氏替换原则来源: 我们都知道面向对象有三大特性:封装、继承、多态。所以我们在实际开发过程中,子类在继承父类后,根据多态的特性,可能是图一时方便,经常任意重写父类的方法,那么这种方式会大大增加代码出问题的几率。比如下面场景:类C实现了某项功能F1。现在需要对功能F1作修改扩展,将功能F1扩展为F,其中F由原有的功能F1和新功能F2组成。新功能F由类C的子类C1来完成,则子类C1在完
依赖倒置原则来源: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是
组合/聚合复用原则来源: 在面向对象的设计中,如果直接继承基类,会破坏封装,因为继承将基类的实现细节暴露给子类;如果基类的实现发生改变,则子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性。于是就提出了组合/聚合复用原则,也就是在实际开发设计中,尽量使用合成/聚合,不要使用类继承。即在一个新的对象里面使用一些已有的对象,使之成为新对象的
OO原则 前言:设计时需要考虑这些原则,但随意使用这些原则会使你的程序出现不必要的复杂性(Needless Complexity)。 参考及说明 本文的撰写,是基于阅读后的梳理 《Agile Software Development:Principles,Patterns.and.Practices 》 1. 开放-封闭原则(Open-Closed Principle) 简称OCP。 (一)概念:
一、概述 面向对象有七大设计原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则。 最主要的是:SOLID S:单一职责原则 O:开闭原则 L: 里氏替换原则 I:接口隔离原则 D:依赖倒转原则 二、面向对象设计原则 1、单一职责原则 上面这个图,有趣地反映了单一职责的重要性,如果我们做
我们曾经一直使用的是OO实际却更像是Classification。 而真实世界的Object,实际上并没有诸如属性、继承、子类等等概念的。 对于真实世界的Object,只有当人类试图去认识它时,会人为的放上一种标签。 比如,一块奇形怪状的石头,也许被放上了标签“雕塑”,原来,这块石头曾经过人工雕琢的。 而有时,我们确只想用“石头”甚至于“物体”的标签来形容它。比如它砸伤了我。 (指代的时候我们
作者:来自ITPUB论坛 2008-02-17 lua本身不支持面向对象的特性,但是由于lua是基于原型(prototype)的语言,要实现面向对象的特性也是有一定的方法的,实现方式有很多种, 总结了一下我最近对使用lua实现面向对象的特性,主要可以分为以下两种不同的方式来实现: 1、使用metatable的__index域实现,实现的时候需要利用的lua语言的一些特性才可以实现,主要有:
lua真的有很多神奇的用法,下面是一个基于表的形式实现的对于GUI的定义。支持事件响应等。 可以在线(http://www.lua.org/cgi-bin/demo)测试运行效果。 -- Canvas
Canvas = {
["frame_msg.OFrame"] = {
skin="Engine//Standard.OSkin1StateFrame
-- object_account.lua
Account = { -- parent class
blance = 0
}
function Account:get_blance() -- parent class method
return self.blance
end
function Account:set_blance(v)
self.blance = v
end
counter = {
count = 0
}
function counter.get(self)
return self.count
end
function counter:inc()
self.count=self.count+1
end
print(counter.get(counter))
counter.inc(counter)
print(c
Table的使用,面向对象思想 (关于table在lua脚本中的定义以及语法,不做介绍,baidu以及google非常多。本文将介绍,lua在C++面向对象思想的应用) 一(metatable) lua的metatable的官方解释, 1. 每个table和每个full user data都可以有自己的metatable,并可通过setmetatable和getmetatable进行访问 2. 其
为了感谢昨天忠实读者,今天赶快在贴出今天又研究通的一些关于require的用法,这个是本质的用法,同时给大家一个lua面向对象思想的例子,闲话不多说了,目录结构还和上一篇一样: 我们可以看到require这个工程下面有两个lua文件,大家一定很奇怪上次的c++文件哪去了,这次顺便给大家推荐个lua的调试工具luaEdit2010,我的资源中也有,贴个连接http://download.csdn.n
--表 元表 元方法结合起来可以实现lua面向对象的机制 --lua中通过原型的思路才使用实现对象的实例化机制 --一个原型表可以用来描述一个类 在原型表中填写属性和方法 --实例化对象,创建一个新表,将新表的元表设置为原型表.将原型表的__index指向自身 --类似js的面向对象机制 function Human(name)
local this={ name=name, a=1, b=2
1、 表(table):Lua中的数据结构,存放各种域 a) Lua中的函数也是第一类值,于是表可以存放属性域和方法域 b) 因此表可以用来描述一个类 2、 元表: a) Lua中每个值都可具有元表。 b) 元表定义了原始值在某些特定的操作下的行为 c) 设置特定的字段改变作用于该值的操作的某些行为特征(数学运算等) d)
这里是一个lua面向对象实现很简单的例子。 Acount = {
balance = 0,
withdraw = function(self ,v)
self.balance = self.balance - v
end
}
function Acount:deposit(v)
self.balance = self.balance + v
end
function Acount:
目标:实现一个class函数,给lua添加面向对象的特性 基础:和编译型的面向对象语言不同,在lua中不存在类的定义这样一个概念,不管是类的定义还是类的实例都需要通过lua table来模拟。我们实现的lua面向对象是prototype方式的,即类是一个lua table,这个table 定义了类实例的原型, 类的实例则是基于这个原型的另一个lua table。 关键:实现Lua面向对象可以分解为
LuaOO 转自云风的博客: 点击打开链接 local _class={}
function class(super)
local class_type={}
class_type.ctor=false
class_type.super=super
class_type.new=function(...)
local obj={}
do
local create
在lua创建一个类与对象的代码: 第一段代码 Class = {}
Class.__index = Class
function Class:new(x,y) // 定义方法用 :
local temp = {}
setmetatable(temp, Class)
temp.x = x
temp.y = y
return temp
end
fun
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 1 Account = {balance = 0}
2 function Account.withdraw(v)
3 Account.balance = Account.balance - v
4 end
5 --下面是测试调用函数
6 Account.withdraw(100.00) 在上面的w