Clean Code

Refactoring, Patterns, Testen und Techniken für sauberen Code

Robert C. Martin

Unter Mitarbeit von:
Michael C. Feathers, Timothy R. Ottinger, Jeffrey J. Langr, Brett L. Schuchert, James W. Grenning, Kevin Dean Wampler
Object Mentor, Inc.

Übersetzt aus dem Amerikanischen von Reinhard Engel

Impressum

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar.

ISBN 978-3-8266-9639-8

1. Auflage 2009

www.mitp.de

E-Mail: kundenservice@hjr-verlag.de

Telefon: +49 6221 / 489 -555

Telefax: +49 6221 / 489 -410

© 2009 mitp, eine Marke der Verlagsgruppe Hüthig Jehle Rehm GmbH Heidelberg, München, Landsberg, Frechen, Hamburg

Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Authorized translation from the English language edition, entitled CLEAN CODE: A HANDBOOK OF AGILE SOFTWARE CRAFTSMANSHIP, 1 st Edition, 0132350882 by MARTIN, ROBERT C., published by Pearson Education, Inc, publishing as Prentice Hall, Copyright © 2009 Pearson Education, Inc.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. GERMAN language edition published by mitp-Verlag, VERLAGSGRUPPE HÜTHIG JEHLE REHM GMBH, Copyright © 2009.

Lektorat: Sabine Schulz

Korrektorat: Petra Heubach-Erdmann

electronic publication: III-satz, Husby, www.drei-satz.de

Dieses Ebook verwendet das ePub-Format und ist optimiert für die Nutzung mit dem iBooks-reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.

Der Verlag räumt Ihnen mit dem Kauf des ebooks das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.

Der Verlag schützt seine ebooks vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die ebooks mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.

Bei Kauf in anderen ebook-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.

Epilog

Auf der ​Agile Conference, 2005 in Denver, übergab mir Elisabeth Hedrickson (http://www.qualitytree.com/) ein grünes Armband, ähnlich der Art, die von Lance Armstrong gemacht worden war. Es trug die Aufschrift Test Obsessed (Testbesessen). Ich nahm es dankbar an und trug es stolz. Seit ich 1999 die Test-Driven Development von Kent ​Beck gelernt hatte, war ich zu einem überzeugten Anhänger der TDD geworden.

Aber dann passierte etwas Seltsames: Ich stellte fest, dass ich das Band nicht mehr ablegen konnte. Nicht, weil es physisch festsaß, sondern weil es moralisch an mir hing. Das Armband drückte meine professionelle Ethik aus. Es war ein sichtbares Zeichen meiner Entschlossenheit, den besten mir möglichen Code zu schreiben. Es abzunehmen, schien mir ein Verrat an dieser Ethik und an dieser Entschlossenheit zu sein.

Deshalb trage ich es noch immer am Handgelenk. Wenn ich Code schreibe, sehe ich es immer in meinem peripheren Blickfeld. Es erinnert mich ständig an das Versprechen, das ich mir selbst gegeben habe: sauberen Code zu schreiben.

Anhang C: Literaturverweise

[Alexander] – A Timeless Way of Building, Christopher Alexander, Oxford University Press, New York, 1979.

[AOSD] – Aspect-Oriented Software Development, http://aosd.net

[ASM] – ASM Home Page, http://asm.objectweb.org/

[AspectJ] – http://www.eclipse.org/aspectj

[Beck07] – Implementation Patterns, Kent Beck, Addison-Wesley, 2007.

[Beck94] – JUnit Pocket Guide, Kent Beck, O'Reilly, 1994.

[Beck97] – Smalltalk Best Practice Patterns, Kent Beck, Prentice Hall, 1997.

[BeckTDD] – Test Driven Development, Kent Beck, Addison-Wesley, 2003.

[CGLIB] – Code Generation Library, http://cglib.sourceforge.net/

[Colyer] – Eclipse AspectJ, Adrian Colyer, Andy Clement, George Hurley, Mathew Webster, Pearson Education, Inc., Upper Saddle River, NJ, 2005.

[DDD] – Domain Driven Design, Eric Evans, Addison-Wesley, 2003.

[DSL] – Domain-specific programming language, http://en.wikipedia.org/wiki/Domain-specific_programming_language; http://de.wikipedia.org/wiki/Domänenspezifische_Sprache

[Fowler] – Inversion of Control Containers and the Dependency Injection Pattern, http://martinfowler.com/articles/injection.html

[Goetz] – Java Theory and Practice: Decorating with Dynamic Proxies, Brian Goetz, http://www.ibm.com/developerworks/java/Library/j-jtp08305.html

[GOF] – Design Patterns: Elements of Reusable Object Oriented Software, Gamma et al., Addison-Wesley, 1996.

[Javassist] – Javassist Home Page, http://www.csg.is.titech.ac.jp/˜chiba/javassist/

[JBoss] – JBoss Home Page, http://jboss.org

[JMock] – JMock – A Lightweight Mock Object Library for Java, http://jmock.org

[Knuth92] – Literate Programming, Donald E. Knuth, Center for the Study of Language and Information, Leland Stanford Junior University, 1992.

[Kolence] – Software physics and computer performance measurements, Proceedings of the ACM annual conference – Volume 2, Kenneth W. Kolence, Boston, Massachusetts, pp. 1024–1040, 1972.

[KP78] – The Elements of Programming Style, 2d. ed., by Kernighan und Plaugher, McGraw-Hill, 1978.

[Lea99] – Concurrent Programming in Java: Design Principles and Patterns, 2d. ed., Doug Lea, Prentice Hall, 1999.

[Martin] – Agile Software Development: Principles, Patterns, and Practices, Robert C. Martin, Prentice Hall, 2002.

[Martin07] – Professionalism and Test-Driven Development, Robert C. Martin, Object Mentor, IEEE-Software, Mai/Juni 2007 (Vol. 24, No. 3), S. 32–36.

[Mezzaros07] – XUnit Patterns, Gerard Mezzaros, Addison-Wesley, 2007.

[PPP] – Agile Software Development: Principles, Patterns, and Practices, Robert C. Martin, Prentice Hall, 2002.

[PRAG] – The Pragmatic Programmer, Andrew Hunt, Dave Thomas, Addison-Wesley, 2000.

[RDD] – Object Design: Roles, Responsibilities, and Collaborations, Rebecca​ Wirfs-Brock et al., Addison-Wesley, 2002.

[Refactoring] – Refactoring: Improving the Design of Existing Code, Martin Fowler et al., Addison-Wesley, 1999.

[RSpec] – RSpec: Behavior Driven Development for Ruby Programmers, Aslak Hellesøy, David Chelimsky, Pragmatic Bookshelf, 2008.

[Simmons04] – Hardcore Java, Robert Simmons, Jr., O’Reilly, 2004.

[SP72] – Structured Programming, O.-J. Dahl, E. W. Dijkstra, C. A. R. Hoare, Academic Press, London, 1972.

[Spring] – The Spring Framework, http://www.springframework.org

[WELC] – Working Effectively with Legacy Code, Feathers, Michael, Addison-Wesley, 2004.

[XPE] – Extreme Programming Explained: Embrace Change, Kent Beck, Addison-Wesley, 1999.