软件开发实践:项目驱动式的Java开发指南 ( etc.) (z-library.sk, 1lib.sk, z-lib.sk)
Author: 【英】拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma) & 【英】理查德·沃伯顿(Richard Warburton)
Java
No Description
📄 File Format:
PDF
💾 File Size:
1.4 MB
8
Views
0
Downloads
0.00
Total Donations
📄 Text Preview (First 20 pages)
ℹ️
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
📄 Page
1
(This page has no text content)
📄 Page
2
O’Reilly精品图书系列 软件开发实践:项目驱动式的Java开发指南 Real-World Software Development: A Project- Driven Guide to Fundamentals in Java (英)拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma) (英)理查德·沃伯顿(Richard Warburton) 著 杜云飞 译 ISBN:978-7-111-66091-0 本书纸版由机械工业出版社于2020年出版,电子版由华章分社(北京 华章图文信息有限公司,北京奥维博世图书发行有限公司)在中华人 民共和国境内(不包括中国香港、澳门特别行政区及中国台湾地区) 制作与发行。 版权所有,侵权必究 客服热线:+ 86-10-68995265 客服信箱:service@bbbvip.com
📄 Page
3
官方网址:www.hzmedia.com.cn 新浪微博 @华章数媒 微信公众号 华章电子书(微信号:hzebook)
📄 Page
4
O’Reilly Media,Inc.介绍 O’Reilly以“分享创新知识、改变世界”为己任。40多年来我们 一直向企业、个人提供成功所必需之技能及思想,激励他们创新并做 得更好。 O’Reilly业务的核心是独特的专家及创新者网络,众多专家及创 新者通过我们分享知识。我们的在线学习(Online Learning)平台提 供独家的直播培训、图书及视频,使客户更容易获取业务成功所需的 专业知识。几十年来O’Reilly图书一直被视为学习开创未来之技术的 权威资料。我们每年举办的诸多会议是活跃的技术聚会场所,来自各 领域的专业人士在此建立联系,讨论最佳实践并发现可能影响技术行 业未来的新趋势。 我们的客户渴望做出推动世界前进的创新之举,我们希望能助他 们一臂之力。 业界评论 “O’Reilly Radar博客有口皆碑。” ——Wired
📄 Page
5
“O’Reilly凭借一系列非凡想法(真希望当初我也想到了)建立 了数百万美元的业务。” ——Business 2.0 “O’Reilly Conference是聚集关键思想领袖的绝对典范。” ——CRN “一本O’Reilly的书就代表一个有用、有前途、需要学习的主 题。” ——Irish Times “Tim是位特立独行的商人,他不光放眼于最长远、最广阔的领 域,并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔 路口,那就走小路。’回顾过去,Tim似乎每一次都选择了小路,而 且有几次都是一闪即逝的机会,尽管大路也不错。” ——Linux Journal
📄 Page
6
本书赞誉 本书通过丰富的实战案例介绍了项目驱动式的Java开发。该书语 言平易近人,逻辑自然清晰,阅读起来轻松愉快。Java特性、软件设 计及架构、SOLID原则、测试等知识在此融会贯通,助你在开发之路 上平步青云。 ——清华大学博士,畅销书作者,Java畅销书译者,肖智清 “大道易得,小术难求”,大部分时候,我们需要的不是大道, 因为即使道理都对,但不经过自己的手去实践过,还是会沦落到“道 理都懂,但还是过不好这一生”的境地。本书不一样,本书反转了角 度,从实际场景出发,从问题到分析到解决到最后总结,一步一步地 共同拆解问题、解决问题并总结升华,这其实才是做事情的正确路 径。强烈推荐在Java和工程领域有追求的各位同学阅读此书! ——前挖财首席架构师,《Spring揭秘》&《SpringBoot揭秘》作者, 王福强 用具体的示例来阐述如何编写软件并使之更易于维护,有助于功 能演进、代码维护和长期迭代,而不是疲于应对填坑!
📄 Page
7
编写伴随时间飞逝仍能轻松演进的可靠代码,除了注释之外,更 要注重自动化测试,熟能生巧,动手编程,唯实践也! 尝试新技术,实现系统功能或解决实际问题是编程带来的乐趣, 本书以项目驱动形式来让大家从软件开发中得到乐趣! ——IBM高级技术顾问,《Effective Java中文版》译者,俞黎敏 作为软件从业人员,我们都知道优秀的设计对于软件的可维护 性、质量、性能都是至关重要的,所以大家都会通过学习设计模式、 最佳实践等方式,让自己的代码变得更好。但市面上的很多相关图 书,要么是介绍特定语言的语法特性,要么空洞地介绍设计理论,读 者缺少一本真正贴近实战的讲解软件设计的图书。本书恰好填补了这 一空白,作者以实际项目作为驱动,深入浅出地讲解了什么才是好的 设计,如何才能交付更好的软件。 ——软件设计师,知名图书译者,InfoQ社区编辑,张卫滨
📄 Page
8
推荐序 软件开发是互联网、软件、工业等行业中最核心的智力活动。需 要从业者具备知识的大量输入和高度聚合能力,并在实际业务中,充 分运用在软件工程基础理论和实践两大方向所学所感的多种技能。软 件工程基础理论的核心是对编程语言和设计模式、设计原则的深刻理 解,并将两者融会贯通。工程实践是对各种方法论的理解和使用。 本书通过各章实例,很好地向读者传授了基础和实践相结合的实 践方法。项目驱动下的软件设计不再是空谈,我们耳熟能详的SOLID 原则、KISS原则、DRY等理论,在各章的实例中准确地指导了项目案 例的设计。同时,作者在每章的实践中,展示了在设计模式和原则的 指导下,如何优雅地完成编码。 此外,本书还从实践角度展示了工程构建(Gradle)和测试驱动 开发(TDD)。通常实际的业务项目都是模块化的,如何利用构建工 具对项目进行编译、调试、构建、分发,如何运用TDD等理论实现快 速迭代和持续交付,这些都是开发者的基本修养。这本书虽然没有面 面俱到地讲到工程实践的完整技术栈,但是开而弗达,将读者引到以 工程项目为主视角的设计和开发的正确道路上来。
📄 Page
9
对初学者来说,通过阅读本书,可以在较短的时间内对软件开发 有较清晰的理解,并能产生与自身结合的学习路线图。对于有一些工 作经验的开发者来说,本书可以帮助你梳理这些年积累的理论和实 践,温故而知新,然后再出发。 ——阿里巴巴资深Java技术专家,韩陆
📄 Page
10
译者序 Java作为OOP(面向对象编程)的集大成者,融合了其他语言的 诸多优点,在经历了多个版本更新之后,它也重新焕发出新的生机, 特别是Java 8的发布,更是让开发者体验到了函数式编程的精妙及强大 之处。而随着这几年开源社区的蓬勃发展,越来越多的组件、框架、 方案如雨后春笋般涌现,现代工程师们大多不用再像前辈们那样从零 开始编写代码,而是更多地将精力放在业务功能的实现上,这在很大 程度上提高了软件开发的效率。特别是在Java方面,其技术体系之庞 大,解决方案之丰富,完全超出任何其他语言平台,可以说,我们遇 到任何一种“钉子”,都能随手找到一大堆“锤子”。但同时我们也 会发现,开发中所遇到的很多问题也并非一个新框架、新方案能完全 解决的。以代码级别的扩展性、可维护性等问题为例,它考察的是工 程师对常见设计原则、模式的理解,以及对软件工程最佳实践的掌握 程度,而这才是工程师真正的核心竞争力! 所以我一直认为,工程师在学习编程技术时,除了要详细了解编 程语言的核心API、组件和框架之外,还应该去探索编程语言的最佳 开发模式,就像习武之人一样,招数重要,但内功心法更重要。幸运 的是,编程语言发展数年,前辈们留下很多已被无数次证明的最佳实 践,这些实践经过时间的沉淀和打磨,逐渐形成一套基本的设计原
📄 Page
11
则,它们是超越框架,甚至是超越语言的存在。作为现代工程师,想 要获取这些资料易如反掌。由于设计原则或设计模式都是经过高度抽 象和提炼形成的,初学者非常容易被各种“概念”“词汇”带偏。目 前市面上很多模式相关的书籍资料,为了让工程师便于理解,其示例 代码都力求简单直接,甚至做了非常多的不切实际的具象化(拟人拟 物)。所以现实情况是,很少有资料是以真实的项目迭代为蓝本进行 讲解的,这会导致大家“即使懂很多道理,但仍写不好代码”。 而这本书填补了这方面的空白。首先,本书是以项目驱动式的方 式来讲解的,即核心章节都会根据一个项目案例来引出开发过程中遇 到的问题,然后引导读者一起去思考这些问题的解决方案,甚至包括 一些设计权衡上的讨论。这种结合具体的业务场景进行反复验证、持 续迭代的讲解方式,能让读者有身临其境之感。其次,本书在内容上 涵盖了工程师必知必会的一些基本设计原则或模式,比如SOLID原 则。SOLID是一组旨在帮助开发易于维护的软件的原则集,包括:单 一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接 口隔离原则(ISP)、依赖倒置原则(DIP)。书中并不会很生硬地介 绍每个原则,而是会根据实际情况来引出这些原则的使用方式。最 后,本书还介绍了TDD(测试驱动开发)、流式API、函数式编程等 目前比较流行的主题,相信大家同样会有所收获。
📄 Page
12
当然,由于篇幅有限,本书不可能全面介绍上述所有内容,很多 时候只是给读者指明一个思考的方向,同时在很多问题上,作者并不 会很武断地表达出对某种设计选型上的肯定或否定。一般情况下,我 们需要根据实际情况做出选型上的权衡,以找出当下的最优解。假如 我们总是期望在最开始就能找到一个绝对正确的答案,很可能会失望 而归。 本书的两位作者在Java领域都有一定的造诣,他们曾在多个大型 国际会议上发表过精彩的主旨演讲,同时也是多本畅销书的作者,比 如Raoul-Gabriel Urma博士曾出版过《Java 8实战》,而Richard Warburton博士曾出版过《Java 8函数式编程》,这两本书可谓是学习 Java 8的必备资料,大家应该都比较熟悉。由如此经验丰富的作者来执 笔,本书在质量上也是经得起推敲的。 由于我是第一次翻译整书,所以刚拿到原著时,比较担心自己能 否准确地呈现原著之意,好在快速读完原著之后,发现书中所讲内容 也是自己多年来心中所思所想,所以翻译过程比较顺利,竟然实现了 人生第一次提前交稿。不过由于译者水平有限,书中所译内容难免存 在词不达意的情况,在此也请各位读者朋友批评指正。我的邮箱是 angel6380@126.com,对书中有任何疑问,都可以通过该邮箱联系我, 谢谢!
📄 Page
13
在本书的翻译工作完成之际,我首先要感谢机械工业出版社华章 公司王春华老师的信任,在今年年初,正是她询问我是否有兴趣翻译 本书,最终才促成了这次合作。然后非常感谢本书的责任编辑李忠明 老师,在翻译过程中他帮我解答了大量问题。 最后,感谢家人、朋友的支持与陪伴,你们是我前进路上的最大 动力!
📄 Page
14
前言 掌握软件开发需要学习一组完全不同的概念。无论你是一名初级 的软件开发人员,还是更有经验的开发高手,这看起来都是一个不可 逾越的障碍。你是否应该花时间去学习面向对象世界中既有的主题, 比如SOLID原则、设计模式或测试驱动开发?你是否应该去尝试一些越 来越流行的东西,比如函数式编程? 即使你已经选择了一些主题来学习,通常也很难确定它们是如何 结合在一起的。什么时候应该在项目中应用函数式编程思想?什么时 候担心测试问题?如何知道在什么时候引入或改进这些技术?是否需 要读一本关于这些主题的书,然后再读一些博客文章或看视频来弄清 楚如何把这些主题结合在一起?该从哪里开始呢? 不用担心,本书就是来帮助你的。它将通过一个综合的、项目驱 动的方式来帮助你学习。你将学习成为一名高效的开发人员所需了解 的核心主题。不仅如此,我们还展示了如何将这些东西组合起来,以 应用于更大的项目。 为什么写作本书
📄 Page
15
多年来,我们在教授开发人员编写代码方面积累了丰富的经验, 我们都写过关于Java 8的书籍,并围绕专业软件开发运营了一些培训 课程。在这个过程中,我们被认证为了Java Champion并成为多个国际 会议的演讲者。 这些年我们发现许多开发人员都可以从几个核心主题的介绍或复 习中受益。通过实践,通常可以很好地覆盖到设计模式、函数式编 程、SOLID原则以及测试,但是很少看到它们如何良好地工作以及相互 配合。人们有时甚至会因为对学习内容的选择性麻木而放弃提高自己 的技能。我们不仅想教授人们核心技能,而且还要以一种容易接近和 有趣的方式来做这件事。 面向开发者的方式 本书也给了你一个以面向开发者的角度去学习的机会。书中包含 大量的代码示例,每当我们引入一个主题时,都会提供具体的代码示 例。你可以获得书中项目的所有代码,因此,如果你想继续学习,甚 至可以在集成开发环境(IDE)中单步调试书中的代码,或者运行程序 来尝试它们。 涉及技术的书籍通常是以正式的、讲义式的方式编写的,那不是 正常人说话的方式!本书采用会话式风格,帮助你参与到书的内容中 来,而不是被居高临下地教导。
📄 Page
16
本书内容 本书每章都围绕一个软件项目展开。在每章的结尾,如果你一直 在跟进,应该能够编写出那个项目。这些项目一开始是简单的命令行 批处理程序,但随着复杂度的增加,它们会发展成功能齐全的应用程 序。 你将从项目驱动的结构中以多种方式获益。首先,你将看到不同 的编程技术如何在集成环境中协同工作。当我们在本书的最后部分看 到函数式编程时,它不仅仅是抽象的集合处理操作,而是为了计算所 讨论的项目中要使用的实际结果而提出的。这解决了一个问题,那就 是:对于教学资料中看起来很好的想法和方法,开发人员经常会不恰 当地或脱离上下文地使用它们。 其次,项目驱动的方法有助于确保在每个阶段都能看到实际的示 例。教学资料中经常有很多被称为Foo的示例类和被称为bar的方法。 而我们的示例与所讨论的项目相关,并展示了如何将这些想法应用到 实际问题中,这些问题类似于你在职业生涯中可能会遇到的那些问 题。 本书每章都是一个全新的项目,是一个学习新事物的新机会。我 们希望读者能从头到尾读完本书,并且真正享受阅读的过程。这些章 节以一个将要解决的挑战开始,带你去了解它的解决方案,然后通过
📄 Page
17
评估你学到了什么以及如何解决这个挑战来结束。我们在每章的开头 和结尾都特别指出这个挑战,以确保你清楚它的目标。 本书目标读者 我们相信,各种不同背景的开发人员都将在本书中发现一些有用 和有趣的东西。而且,某些开发人员将会从这本书中获得最大的价 值。 初级的软件开发人员,通常是刚从大学毕业或从事编程工作几年 的开发者,我们认为他们是本书的核心读者。你将了解一些基本的主 题,我们希望这些主题与你的整个软件开发生涯都是息息相关的。不 要求读者一定有大学学历,但是要知道编程的基础知识,这样才能更 好地利用本书。例如,我们不会解释if语句是什么或循环是什么。 你不需要了解太多关于面向对象或函数式编程的知识就可以开始 阅读本书。在第2章中,除了假设你已知道类是什么并且能使用集合和 泛型(例如,List<String>)之外,我们没有做其他任何假设。我们 是从基础开始的。 另一个对本书特别感兴趣的群体是正在学习Java的开发人员,他 们可能熟悉其他编程语言,如C#、C++或Python。这本书帮助你快速掌
📄 Page
18
握语言结构,以及编写好的Java代码所必需的原则、实践和习惯用 法。 如果你是一名很有经验的Java开发人员,你可能想跳过第2章,以 避免重复你已经知道的基本内容,但是第3章将会包含对许多开发人员 都有用的概念和方法。 我们发现学习是软件开发中最有趣的部分之一,希望你在阅读本 书时也能发现这一点。祝你阅读愉快。 排版约定 本书使用以下排版约定: 斜体(Italic) 表示新的术语、URL、电子邮箱地址、文件名和文件扩展名。 等宽字体(Constant width) 用于程序清单,以及在段落中引用的程序元素,如变量名、函数 名、数据库、数据类型、环境变量、语句和关键字等。 等宽粗体(Constant width bold) 表示命令或其他应当由用户键入的文本。
📄 Page
19
等宽斜体(Constant width italic) 表示应当由用户提供的值或由上下文环境确定的值替换的文本。 该图示表示一般性的注意事项。 示例代码 可以从https://github.com/Iteratr-Learning/Real-World- Software-Development下载补充材料(示例代码、练习等)。 这里的代码是为了帮助你更好地理解本书的内容。通常,可以在 程序或文档中使用本书中的代码,不需要联系O’Reilly获得许可,除 非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来 编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的配套 CD-ROM则需要O’Reilly出版社的许可。引用本书的示例代码来回答一 个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的 产品文档中则需要获得许可。 非常欢迎读者使用本书中的代码,希望(但不强制)你注明出 处。注明出处的形式包含书名、作者、出版社和ISBN,例如:
📄 Page
20
Real-World Sofware Development,作者Raoul-Gabriel Urma和 Richard Warburton,由O’Reilly出版,书号978-1-491-96717-1 如果读者觉得对示例代码的使用超出了上面所给出的许可范围, 欢迎通过permission@oreilly.com联系我们。 O’Reilly在线学习平台(O’Reilly Online Learning) 近40年来,O’Reilly Media致力于提供技术和商 业培训、知识和卓越见解,来帮助众多公司取得成功。 我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图 书、文章、会议和我们的在线学习平台分享他们的知识和经验。 O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习 路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的 大量文本和视频资源。有关的更多信息,请访问 http://oreilly.com。 如何联系我们 对于本书,如果有任何意见或疑问,请按照以下地址联系本书出 版商。
The above is a preview of the first 20 pages. Register to read the complete e-book.
Recommended for You
Loading recommended books...
Failed to load, please try again later