软件工程 面向对象设计原则与项目中的应用


本文面向应付软件工程考试,真的想学东西,可以不用看了

面向对象设计原则以及在项目中的应用

迪米特法则

  • 一个实体应当尽可能少的和其他实体发生相互作用,使得系统相对独立
  • 核心观点,解耦合,弱耦合,类的耦合弱复用性才可能提高。

项目中的实例:
在项目中JAVA程序中,我要实现在一个页面中展示多条信息。需要用adaptor 调用 presenter类的方法。简单的方法是,从acvtivity中将presenter传入adapter中,以供adapter调用他的方法。 但这样是强耦合的。为了解耦,使用activity为adapter定义一个接口,adapter中通过调用接口来调用activity,在activity中再去调用presenter,这样,adapter可以与presenter交互的同时,两者也是尽可能少的知道对方。

里氏代换原则

  • 使用基类的地方,必须透明的使用其子类

项目中的实例:
在Android端需要实现对视频的解码过程,并且针对不同编码格式的视频,需要不同类型的解码器。
针对h264编码的视频,我定义了一个decoderH264类,由于后期功能扩充,系统又要支持h265视频的解析。因此我是用decoderH265类继承decoderH264类,并且保证方法的签名相同,这样可以将h264的解码器都透明的替换成h265解码器,以支持h265视频解码。

开闭原则

  • 对修改关闭,对拓展开放
    项目实例:由于再实现解析视频时,采用两种模式,一种是从文件中读入视频数据,一种是通过socket传入视频数据。
    利用类的多态这个特性,不修改使用方的代码。我简历个一个AbstractReader 抽象类 ,并泛化其两个子类 FileReader 和 SocketReader。这样就可以任意修改代码,而不会影响调用方的代码

单一职责原则

后端springboot中分 DAO Entity Service Controller层,每层的任务明确,职责单一

  • DAO 持久层,与数据库交互
  • Entity 实体层,是数据库在项目中的类
  • Service 业务层,调用dao层,接收dao层的返回数据,完成基本功能
  • controller 控制层 负责接收前后端交互,接收前端请求,调用service层

依赖倒转原则

项目实例:由于再实现解析视频时,采用两种模式,一种是从文件中读入视频数据,一种是通过socket传入视频数据。
利用类的多态这个特性,不修改使用方的代码。我简历个一个AbstractReader 抽象类 。
在AbstractReader中定义功能所需的各种接口,调用方针对接口去编程,比如 reader.read()。 而不是针对具体的类编程
并泛化其两个子类 FileReader 和 SocketReader。这样就可以任意修改代码,而不会影响调用方的代码

合成服用原则

  • 尽量使用组合聚合
  • 使用合成复用原则,关联已有类。定义一个解析器对象,从而进行关联,而不是继承一个解析器类进行操作。
public H264TcpReceiver(Context context, SurfaceView sfw, final String IP) {
       

        mThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                try {

                    // 
                    …………
                    //构造解析器
                    DecodeTcp decoder = new DecodeTcp(mContext,mSurfaceView,in);
                    decoder.start();
                    // 
				     …………………

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

面向对象的设计原则

项目中的观察者模式

项目中需要实现使用列表动态展示当前就局域网内设备的功能。

为了展示各个设备,需要将device 类加入到 deviceList中,我们需要调用adaptor,notifychange() 函数,来通知作为观察者的CyclerView ,deviceList已经发生了变化,然后CyclerView才会更新前端UI将新加入的设备展现出来。

项目中开发时选用的过程模型

  • 在我们的项目中选择增量模型,先开发主要功能或用户最需要的功能,随着事件推进,不断加入新的辅助功能或次要功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值