Understand Abstraction and Interface

Foreword

抽象和接口是Java中的两个关键字,也是两种最基本的优化软件项目手段。为什么说它们是一种优化项目的手段?

人分三六九等,不同等级的人,所接触的事和处理的事是不一样的。同理,项目也分大项目和中项目和小项目,大、中、小项目所承载的目标也是不一样的。

先说小项目,如果你使用Java只是写一个小脚本,比如更新一下系统时间,自动点击某个软件按钮,修改表格数据...类似这样的功能。对于这种小项目,项目里无非三、两个功能函数,有个Main按照顺序调用一下即可,那么这种项目就永远都不需要使用到抽象和接口。用了反而是累赘,有画蛇添足的味道。

但是对于大项目就不同了,比如一个大型的电商系统,用户的需求多、使用人群广、数据类型多且需要一定关联度。商品种类多、店铺的类型各异...,当然这些都是在系统设计阶段的麻烦。在开发阶段的麻烦是,不同项目组的人都做不同的模块,一个项目组的人怎么配合也是麻烦,最后数据对接起来也是麻烦、前后端之间的数据对接...,怎么样,想想都头疼了吧。

为什么说有了抽象和接口,能给大型项目带来便利、优化?

Abstraction and Interface

一些前人留下了一些经典的设计模式,比如单一模式,指在设计的时候要保证类的单一功能,如果完全按照这种模式,那么业务的实现会变成无数个类,并且代码间非常耦合,在修改业务需求和代码的时候,都是一场灾难。

接口则是解耦的最基本工具,接口允许将方法的定义与其实现分开,这种分离使得多个不相关的类能够实现同一组方法,从而保证了项目中不同部分之间的相互通信。

抽象类非常适合多个子类共享共同特征和属性,但也兼容自己独有的行为情况,同时为子类的定制实现留出空间。

这个现象让我想到对有序数组的排序:

就类似对有序数组进行排序,使用冒泡排序和二分查找算法去实现,虽然都能完成这个效果。但是它们的时间复杂度差异也很大,差了一个数量级。

  • 冒泡排序的时间复杂度为O(n);
  • 二分查找的时间复杂度为O(logn);

同样的,你不使用抽象和对象也一样能实现大型项目,但是效果不一样,在管理的复杂度上也不一样。

如果说冒泡和二分体现的差异在时间和空间上。那么设计不合理的项目,就体现在在代码的工作量上。

当然,项目中增加了抽象和接口,新人的理解难度也直线上升,这也逼迫这个项目的程序员都必须得安装OOP思想,才能上手这种项目。

相关推荐
洛克大航海4 天前
Python面向对象
开发语言·python·面向对象
源代码•宸9 天前
Golang原理剖析(interface)
服务器·开发语言·后端·golang·interface·type·itab
二哈喇子!12 天前
面向对象经典题整理
java·面向对象·
星火开发设计13 天前
Java面向对象三大特性:封装、继承与多态的深度解析及实战
java·开发语言·microsoft·多态·继承·面向对象·封装
CCPC不拿奖不改名13 天前
大语言模型的基础:大语言模型基础认知
人工智能·python·学习·语言模型·自然语言处理·面向对象·智能体
qq_317620311 个月前
第07章-面向对象编程
设计模式·面向对象·类与对象·封装继承多态·特殊方法
rolt1 个月前
软件需求设计方法学全程实例剖析幻灯片01-概述[202512更新]
产品经理·需求分析·架构师·uml·面向对象
Trouvaille ~1 个月前
【C++篇】把混沌映射成秩序:哈希表的底层哲学与实现之道
数据结构·c++·stl·哈希算法·散列表·面向对象·基础入门
chen_note1 个月前
Python面向对象、并发编程、网络编程
开发语言·python·网络编程·面向对象·并发编程
好评1241 个月前
【C++】继承与多态:从语法到底层原理
开发语言·面向对象·类与对象