面向对象专题提供面向对象的最新资讯内容,帮你更好的了解面向对象。
单一职责原则来源:         定义:单一职责就是一个类负责一项职责.就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。         所谓职责,我们可以理解为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。
里氏替换原则来源:         我们都知道面向对象有三大特性:封装、继承、多态。所以我们在实际开发过程中,子类在继承父类后,根据多态的特性,可能是图一时方便,经常任意重写父类的方法,那么这种方式会大大增加代码出问题的几率。比如下面场景:类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