Introduction to "Design Techniques"
A look at the role of design in the context of the overall software development process
By Bill Venners, JavaWorld.com, 02/01/98
- Digg
- Reddit
- SlashDot
- Stumble
- del.icio.us
- Technorati
- dzone
At last year's JavaOne conference, I attended a session in which the speaker talked about Sun's plan for the Java virtual
machine (JVM). In this talk, the speaker stated that Sun planned, among other things, to clear up current performance bottlenecks
in its virtual machine, such as the slowness of synchronized methods and the performance costs of garbage collection. The
speaker stated Sun's goal: With the improvements to the JVM, programmers would not need to think about avoiding virtual machine
bottlenecks when they designed their programs; they would only need to think of creating "good object-oriented, thread-safe
designs."
The speaker did not, however, elaborate on what actually constitutes a good object-oriented, thread-safe design. That is the
aim of this new column. Through the articles of the Design Techniques column, I hope to answer the question: What is a good Java program design, and how do you create one?
The column's focus
My focus in this column will be to provide practical design techniques that you can put to use in your everyday programming
tasks. I'll assume you are familiar with the Java language and APIs. I plan to discuss techniques, ideas, and guidelines that
will help you use the language and APIs in your real-world programs.
To give you an idea of what to expect in this column, here is a list of the kinds of topics I plan to write about:
- Ways to improve the design of your objects
- Building class hierarchies
- What are interfaces for?
- What is the point of polymorphism?
- Choosing between composition and inheritance
- Designing for thread safety
- Designing for thread cooperation
- The Model/Controller/View architecture used by the JFC classes
- Design patterns
Much of the material that has already been written about software design can be applied to Java. There are many full-featured
design methodologies and thick textbooks that describe them. In this column I won't promote one methodology over another.
Nor will I promote a new methodology of my own invention. Rather, I will draw on and combine insights that I've gained from
several existing methodologies and found to be useful in my own programming practice.
The approach to design that I will recommend in these articles arises out of my experiences over the years in the cubicle:
designing new software, enhancing old software, maintaining software written by others, maintaining software written by myself,
working with various languages, tools, computers, and other programmable machines. My design philosophy will be very "cubicle-oriented":
based on, and geared toward, real-world commercial programming.
This month: Process described, "design" defined
In this initial article of the Design Techniques column, I will provide a detailed account of the concept of software design based on my own experience as a developer. In
the remainder of this article, I'll discuss the process of software development and explain what I mean by the term "design."
The software development process
In my experience, the process of software development tends to be rather chaotic. Team members come and go, requirements change,
schedules change, entire projects get canceled, entire companies go out of business, and so on. The programmer's job is to
successfully navigate this chaos and in the end produce a "quality" product in a "timely" manner.
- Digg
- Reddit
- SlashDot
- Stumble
- del.icio.us
- Technorati
- dzone
Resources
- The Javadoc Home Page has more information about Java's code documentation tool http://www.javasoft.com/products/jdk/javadoc/index.html
- Recommended Books on Java Design http://www.artima.com/designtechniques/booklist.html
- Object Orientation FAQ http://www.cyberdyne-object-sys.com/oofaq/
- 7237 Links on Object-Orientation http://www.rhein-neckar.de/~cetus/software.html
- The Object-Oriented Page http://www.well.com/user/ritchie/oo.html
- Collection of Information on OO Approach http://arkhp1.kek.jp:80/managers/computing/activities/OO_CollectInfor/OO_CollectInfo.html
- Design Patterns Home Page http://hillside.net/patterns/patterns.html
- A Comparison of OOA and OOD Methods http://www.iconcomp.com/papers/comp/comp_1.html
- Object-Oriented Analysis and Design Methodsa Comparative Review http://wwwis.cs.utwente.nl:8080/dmrg/OODOC/oodoc/oo.html
- Patterns-Discussion FAQ http://gee.cs.oswego.edu/dl/pd-FAQ/pd-FAQ.html
- Implementing Basic Design Patterns in Java (Doug Lea) http://g.oswego.edu/dl/pats/ifc.html
- Patterns in Java AWT http://mordor.cs.hut.fi/tik-76.278/group6/awtpat.html
- Software Technology's Design Patterns Page http://www.sw-technologies.com/dpattern/
- Synchronization of Java Threads Using Rendezvous http://www-cad.eecs.berkeley.edu/~jimy/classes/rendezvous/
- Design PatternsElements of Reusable Object-Oriented Software, In Java http://www.zeh.com/local/jfd/dp/design_patterns.html
Very good articleBy Anonymous on November 27, 2009, 10:46 amThanks for that article, I am a student and it helped me understand more clearly "Real-World" programming. Highly regarded article here!
Reply | Read entire comment
Best description for Software development processBy Anonymous on April 9, 2009, 10:28 amThanks The article truly good and written by heart
Reply | Read entire comment
View all comments