抽象与继承编程指南

     

20个OOP基本抽象原理问答题

43 3K

通过我们的 20 个最重要的抽象原理问题来掌握您的面向对象编程面试。提升您的理解并展示您的抽象能力,这是有效软件设计的关键概念。准备好在下一次技术面试中取得好成绩!1. OOP 中抽象原则背后的基本思.

抽象两种方法:上下文与类型

326 2 3K

“抽象”的中文意思是“抽出象形”。奥妙就在于实现手段有很多,也是创新所在,这里比较三种手段:首先是中文字面意思上的“抽象”:抽出象形,中国文化谓之为神,例如中国水墨国画,还有古诗词:“窗前明月光疑是地.

一张图说明继承的缺点

179
多轮继承以后,无法确定结果类型。解决方法: 1、只限制一轮继承 2、只限制在业务功能上的继承,如领域模型实体和值对象 3、默认使用组合,类似Golang Rust语言直接迫使你使用组合,完全形式化与函.

继承和OOP已经死亡了吗?

900 7K

这是一个关于如何被迫放弃继承和面向对象编程的故事,作者仍然怀念它很长一段时间。为什么五年后的今天,作者还是认为继承在大多数情况下是一个较差的选择。Rust 和 Go 等新兴语言非常强烈地反对继承,许多.

Golang 不是 Java,类型嵌入不是继承。

507

在 Golang 中,可以使用结构将一个类型嵌入到另一个类型中。这看起来像一个普通的字段声明,但没有名称。这是将一个结构嵌入另一个结构:type inner struct {    a int}typ.

为什么组合优于继承?

1701 1

过度(滥用)继承一直是OO的最大问题之一。组合可以在OO或FP中实现,对FP的了解(哪怕是一点点)可以积极地影响你如何写OO代码。继承不应该是学生们学习的第一件事,但它却是。我看到很多初学者从第一天开.

如何使用OO和函数式两个方法实现重构? - DZone

1080 2 2K

Java 中的重构有很多方面,但其中有两个基础:面向对象和函数式。面向对象几乎从第一个 Java 版本开始就存在,而函数式只出现在 Java 1.8(2014 年 3 月)中。Java 是一种经典的面.

DRY原则:识别模式并抽象概括 - javierdearcos

1152 1

DRY 来自“Don't Repeat Yourself”的首字母缩写词,是最普遍的开发原则之一。它是由Andy Hunt和Dave Thomas在他们的书The Pragmatic Programm.

软件工程中的海仑定律 - hyrumslaw

2389

海仑定律(Hyrum's Law)是软件工程中一种观察经验:有了足够数量的 API 用户,您在合同中承诺什么并不重要:您系统的所有可观察行为都将取决于某人。我(Hyrum)是 Google 的一名软件.

面向对象编程核心是多态!不是抽象哦 | by Sohee Kim

924 1

运行良好的软件和运行正常的软件之间是有区别的。仅考虑其行为,构建有效的软件是一项工作完成了一半。软件工程师应该通过考虑其结构来构建灵活且可扩展的软件。好的软件来源于好的结构,好的结构来源于好的架构。因.

幽默:简单几点说明日常编程中的软件设计或程序设计

947 3

软件设计或程序设计不只是算法设计,还有模式结构的设计,体现在:  - 将模块分组到架构层是设计。  - 将类分组为模块是设计。  - 将函数分组为类是设计。  - 重命名变量是设计。 设计和用户体验有.

LSP-Liskov替代原理 - deepdive

1426

Liskov替换原则是SOLID的一部分,该缩写缩写总共捆绑了5条设计原则。它通常与干净的代码相关联。但是到底是什么,对您来说重要吗,您甚至应该关心吗? 它是什么?如果S是T的子类型,则可以用类型S的.

JPA/Hibernate技巧:获取子类定义的关联的最佳方法 - thorben

1982 8K
EntityGraphs和JOIN FETCH子句提供了一种简单有效的方法来获取实体并初始化其关联。但是,如果尝试将其与使用继承的域模型一起使用,则会很快遇到问题:您不能在多态查询中使用此方法来获取在.

Martin Fowler:继承是被误用了

1320 4

很多权威人士,包括OO粉丝,都不喜欢“继承”,但是它让我将一个通用行为调整到特定行为时更有用和简单,只是它被误用了,像很多技术一样,需要学会如何好好地用它。众说纷纭:1. 我默认使用组合,并且如果在重.

Java中的重载和覆盖的细微差别 - rajivprab

1 1158 13K

我已经用Java编程超过五年了,并且认为我知道重载和覆盖是如何工作的。只有一次我开始思考并写下以下的角落案例,我才意识到我几乎不知道它。为了游戏化这些细微差别,我在下面将它们列为一系列谜题。单一分发假.

扩展对象(Extension objects)

1100 25K
目的预计将来需要扩展对象的接口。其他接口由扩展对象定义。适用场景 您需要支持向现有类添加新的或不可预见的接口,并且不希望影响无需此新接口的客户端。扩展对象允许您通过在单独的类中定义相关操作来将它们保持.

Java中基于泛型的交叉类型 - {4Comprehension}

1846 1 2K

简单地说,交集类型是通过组合至少两种不同类型而创建的匿名类型的形式。想象一下,我们需要模拟两种类型的动物: 那些可以飞的 那些可以游泳的 我们可以简单地实现两个接口:class SailfinFlyi.

抽象文档模式(Abstract Document)

1800 44K
目的实现无类型语言的灵活性并保持类型安全适用性何时使用抽象文档模式 需要动态添加新属性 你想要一种灵活的方式来组织树状结构中的域 你想要更松散耦合的系统 .

类表继承模式(Class Table Inheritance Pattern)

3334 26K
此模式属于对象关系结构模式目录,此目录属于企业应用程序体系结构模式。目的表示类的继承层次结构,每个类具有一个表。类表继承在继承结构中为每个类支持一个数据库表。说明在图中,每个类都有自己的数据库表。Pl.

什么是抽象文档模式?

2090 2 3K
文档是包含许多属性的对象,而属性可以是数字或字符串之类的值,也可以是其他文档的列表。使用键Key引用每个属性。当遍历文档树时,用户指定用于创建下一级别的实现类的构造函数。这些实现通常是扩展Docume.

对抽象方法仇恨的自白 - 250bpm

796 3K

我之前写过关于抽象成本的文章。一旦你在IT行业工作了几十年,一旦你在遗留代码上阅读了数百万行,你就会对任何一种抽象产生正常的怀疑。并不是说我们可以不做抽象。我们需要它能够编写代码。但是,每次在代码中遇.

用汽车比喻理解OOP - Jonathan Kuhl

2765 4 11K

站在任何街角,观看交通一段时间,来来往往都是汽车。它们具有相同的基本结构:四个轮子,一个发动机,一个方向盘,用汽油或柴油运行。然而,它们在颜色,马力,形状,特征甚至可能使用的汽油类型方面差异很大。每条.

这不是你想要的DRY

1017

“ 不要重复自己 DRY”,每个开发者都在他职业生涯的早期就学会了这个口头禅。对这个原则的共同理解是你不应该复制你的代码。就那么简单。不要复制,如果你发现重复就重构。违反此规则的行为将被其他开发人员立.

错误的抽象

1341

复制比错误的抽象便宜得多(代价小成本低),宁可重复而不选择错误的抽象。让人们意识到“错误的抽象”这个问题是很难: 程序员A看到重复。 程序员A提取重复并为其命名。这创建了一个新的抽象。它可能是一种新方.

抽象的力量

1014 2

如果有人问我“在所有软件开发中最重要的概念是什么?” 我会用一个词来回答它:“抽象”。抽象就是将一个想法简化为绝对本质。让我们看一个例子:运行这个活动,如果你仔细看看你跑步时身体实际发生了什么,你的头.

用Lambda实现模板模式

1186 4K

Java 8 Lambda表达式的简洁性为经典的GoF设计模式提供了新的视角。通过利用函数式编程,我们可以通过更少的耦合和仪式获得相同的好处 - 模板方法就是一个很好的例子。经典的GoF模板方法实现模.

间接不是抽象

802

这篇文章认为接口interface代表的间接和abstract代表的抽象并不是一回事,间接是为了分离,松耦合,而抽象是为了将细节剥离。这是软件设计中两个不同维度。然后他谈了这两种情况的四个组合:没有间.

继承可能是有益的,Class不能是final!

1627 1 7K

任何优雅对象的类必须是抽象的或final的,我相信,这条规则背后的意图是消除继承。继承的缺点和子类型的缺点是相当清楚的,所以我不会在这里强调,然而,在我的实践中,我很快意识到这条规则出了问题。比如下面.

错误的抽象

1262 2

重复是比错误的抽象更便宜。看到重复事物,我们总是试图从重复中抽象出共同点,这其实属于过度设计,反而给代码带来更高的维护拓展成本。duplication is far cheaper than the .

再见面向对象编程?

1 3001 3 2K

一位有着10年面向对象语言的程序员对面向对象两大支柱继承和封装提出了自己的疑问,并由此认为可以向面向对象说再见了。原文:Goodbye, Object Oriented Programming — M.