字体:  

经过三天的学习,个人对抽象类和接口的理解,希望大家能讨伦一下

PhpServerPage 发表于: 2008-9-15 18:00 来源: PHPChina 开源社区门户

先屁话几句:
抽象类和接口其实对功能的实现没什么用,也不会直接的给代码带来什么可推护性,反过来说因为事先抽象好了所有的功能,所有的程序多要安照这个抽象的规则来实现这些功能,所以就间接的给程序带来了可维护性。。。嘿嘿不知道说的对不。。

实际操作
迪象类和接口的实际操作中的实现应该是这样的,首先是由网站的框架设计师设计好抽象类,然后是由下面的程序员来实现抽象类中的各项功能,这样的话程序员就只能安照设计师设计好的规则来写,实际的作用就是易于管理。。。

何实使用接口,何时使用抽象类
比如说我写好了一个抽象类,里面有两个功能打开数据库和关闭数据库
abstract class db{
abstract public  function opdb();
abstract public  function codb();
}
接着我又想还要一个报错的功能,想想报错和数据有关系吗???  ???????????我也有点迷糊,,,,反正是没有多大的关系,其它的类也会有这功能所以再写个接口吧
interface dberror{
public  function ErrorIofo();
}

实现部分
  class aaa extends db implements db{
public  function opdb();
public  function codb();
public  function ErrorIofo();
}

初中文化写的比较潦草,,还希望大家多多批评,,指出不对的地方




[ 本帖最后由 PhpServerPage 于 2008-9-15 19:12 编辑 ]

最新回复

xinzf at 2008-9-15 18:07:46
数据库报错方法完全就可以写在抽象类里面嘛,只不过不是抽象方法就是,这样所有的子类都可以使用,干嘛还单独搞一个报错的类?
PhpServerPage at 2008-9-15 18:16:55
我想这是一个思想的差别,,,所以说我自已也比较迷糊,呵呵,
希望谁能更好的说明一下

[ 本帖最后由 PhpServerPage 于 2008-9-15 18:58 编辑 ]
programmerhuang at 2008-9-15 19:51:22
其实代码写的好不好(维护性), 要看写代码的人, 这些技术只是辅助使用.
阿辛 at 2008-9-15 20:12:52
发现楼主用的是五笔输入法
clearchen at 2008-9-15 20:48:28
怎么发现的
lxylxy888666 at 2008-9-15 21:16:26
菜鸟到此一学....
PhpServerPage at 2008-9-15 23:07:37

QUOTE:

原帖由 阿辛 于 2008-9-15 20:12 发表
发现楼主用的是五笔输入法
你还真牛,这多知道,,,,,怎么没人来批评一下啊。。。。。。。。。。。
q276133913 at 2008-9-16 11:43:51

QUOTE:

原帖由 PhpServerPage 于 2008-9-15 23:07 发表

你还真牛,这多知道,,,,,怎么没人来批评一下啊。。。。。。。。。。。
象类和象类这两个字用拼音输入法一般不会犯这么搞笑的错误,也只有五笔能出偏旁的差异错误!
zhangping972 at 2008-9-16 14:22:14
呵呵,和我的理解差不多,小程序就不需要用到了,只有大的项目才用的上
sigmazel at 2008-9-16 15:51:22
还是多多看点书吧。
OOP就三斧子:分类、分层、关系
PhpServerPage at 2008-9-16 18:00:05
原来如此,错别字对我来说已经是一种习惯呵呵。。。
david11103 at 2008-9-16 22:43:54
写代码一定要规范...
programmerhuang at 2008-9-17 06:30:56
其实类, 抽象类都可以看成是一个接口, 与接口一样, 是一些类之间的合作协议.

> 抽象类和接口其实对功能的实现没什么用,也不会直接的给代码带来什么可推护性,
其实直接就可以带来好处了, 当接口定下来后, 开发者只要按接口来开发, 专注了某个类里面, 而不用太多的顾及到调用者.

LZ的实现部分, 我觉得是不是想这样写:

就像LZ的代码, 无法看出OO的优势出来, 反而给人一种, 多此一举的感觉.
就像我的另一张贴中说的, LZ只是停留在类的定义上, 你应该考虑怎么样使用你的DB类会比较好用, 而不是想怎么样去应用抽象类和接口.
当你考虑怎么样使用某个类会好用后, 有一天需要的时候, 你自然会用到抽象类和接口.

而LZ这种错误处理方式, 还是比较传统的处理方式, 与函数, 或面向过程的方式差不多.
我觉得这种错误处理, 应该使用异常.
异常可以中断后面的运行, 也可以多层抛出, 不用只能在发生错误的对象上才能取得错误消息.
PhpServerPage at 2008-9-17 07:58:37
楼上说的对,可能我举的例子本身就有问题,,,

我想这样举例好比较好些
class aaa extends db implements dberror{
public  function opdb();//打开数据库链接
public  function codb();//关闭数据库
public  function query($sql);//提交sql
public  function SafeHandling($sql);//给不安全的sql做一些处理,这个是接口里的
}
楼上说的易用性肯定是重要的,不过用这抽象类和接口是为了程序的可维护性吧,呵呵不知道是错是对、、

比如接着上面的例子

抽象数据库,数据库有很多种,mysql mssql 等等等等。。。
比如我给抽象类中再加个计算数据的功能,那么mssql mysql 子类中只要一个没有实现这个功能,就有报致命的错误。。。。

呵呵,不知道是不是会又说错了
PhpServerPage at 2008-9-17 09:26:54
真的是有点难理解呵呵,,我也感觉越搞越麻烦了,汗
huanglujun at 2008-9-17 17:29:01

QUOTE:

原帖由 q276133913 于 2008-9-16 11:43 发表

抽象类和迪象类这两个字用拼音输入法一般不会犯这么搞笑的错误,也只有五笔能出偏旁的差异错误!
哈哈,有意思!
soni at 2008-9-19 08:53:21
类是对数据的封装,接口是对功能的封装。
由此看来,接口更灵活些。不用被数据绑死