
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件编程开发行业在许多人的印象中都是一个高薪行业的代表之一,今天贵阳达内培训就带大家简单来了解一下,面向对象编程抽象性都有哪些。
领域驱动设计
还有一种方式我们也可以这么来写,新增“商机”模型,通过商机来关联客户与销售之间的关系。而商机的归属也分为公海、私海等具体归属场景。商机除了有必要的数据外,还应该收拢一些业务行为,捡入、开放、分发等。通过领域建模,利用面向对象的特性,确定边界、抽象封装、行为收拢,对业务分而治之。
当我们业务上说“商机分发到私海”,而我们代码则是“opportunity.pickTo(privateSea)”。这是领域驱动所带来的改变,面向领域设计,面向对象编程,领域模型的抽象就是对现实世界的描述。但这并非一蹴而就的过程,当你只触碰到大象的身板时,你认为这是一扇门,当你触碰到大象的耳朵时,你认为是一片芭蕉。只有我们不断抽象不断重构,我们才能愈发接近业务的真实模型。
抽象的品质
抽象永远是软件工程领域难的命题,因为它没有规则,没有标准,甚至没有对错,只分好坏,只分是否适合。同样一份淘宝商品模型的领域抽象,可以算是业界标杆了,但它并非适合你的系统。那我们该如何驾驭“抽象”呢?UML的创始人Gradybooch在ObjectOrientedAnalysisandDesignwithApplications一书中,提到了评判一种抽象的品质可以通过如下5个指标进行测量:耦合性、内聚性、充分性、完整性与基础性。
耦合性
一个模块与另一个模块之间建立起来的关联强度的测量称之为耦合性。一个模块与其他模块高度相关,那它就难以独立得被理解、变化或修改。TCL语言发明者JohnOusterhout教授也有同样的观点。我们应该尽可能减少模块间的耦合依赖,从而降低复杂度。
内聚性
内聚性与耦合性都是结构化设计中的概念,内聚性测量的是单个模块里,各个元素的的联系程度。高内聚低耦合,是写在教科书里的观点,但我们也并非何时何地都应该盲目追求高内聚。
内聚性分为偶然性内聚与功能性内聚。金鱼与消防栓,我们一样可以因为它们都不会吹口哨,将他们抽象在一起,但很明显我们不该这么干,这就是偶然性内聚。希望出现的内聚是功能性内聚,即一个类或模式的各元素一同工作,提供某种清晰界定的行为。比如我将消防栓、灭火器、探测仪等内聚在一起,他们是都属于消防设施,这是功能性内聚。
充分性
充分性指一个类或模块需要应该记录某个抽象足够多的特征,否则组件将变得不用。比如Set集合类,如果我们只有remove、get却没有add,那这个类一定没法用了,因为它没有形成一个闭环。不过这种情况相对出现较少,只要当我们真正去使用,完成它的一系列流程操作后,缺失的一些内容是比较容易发现并解决的。
完整性
完整性指类或模块需要记录某个抽象全部有意义的特征。完整性与充分性相对,充分性是模块的小内涵,完整性则是模块的大外延。我们走完一个流程,可以清晰得知道我们缺哪些,可以让我们马上补齐抽象的充分性,但可能在另一个场景这些特征就又不够了,我们需要考虑模块还需要具备哪些特征或者他应该还补齐哪些能力。
基础性
充分性、完整性与基础性可以说是3个相互辅助相互制约的原则。基础性指抽象底层表现形式有效的基础性操作(似乎用自己在解释自己)。比如Set中的add操作,是一个基础性操作,在已经存在add的情况下,我们是否需要一次性添加2个元素的add2操作?很明显我们不需要,因为我们可以通过调用2次add来完成,所以add2并不符合基础性。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。