CSC 241- set #1


Software life cycle

a. Analysis/Specification -

  1. define the problem (i.e. what are we building?)
  2. set budget
  3. set milestones
  4. Choose hardware/software
  5. Build a prototype

b. Design - How do we build the specified system?

Object Oriented design requires identification of objects, their relationships and communications. Use of nouns and verbs found in specifications in determining objects, their state and methods is one of the techniques employed in this process. It is critical to design clean and coherent classes of objects that encapsulate a state and a set of methods that operate on that state. Hiding the details from the other components of a system is critical here. Objects must act as black boxes wherever we use them. A class must be highly cohesive, all of its pieces, be it, the elements that constitute the state of its objects, or its methods must fit together perfectly--they must make sense. Classes must be loosely coupled, the communication between objects must be clear and minimal.

Probably, the single most important difference between the traditional top-down approach to design and object oriented design is in the level of software reuse. A good Object designer looks for existing classes of objects. He/she employs inheritance to extend classes to make them meet his/her needs, never reinventing the wheel. Java Package Documentation provide a good example of object classification and frameworks. You will use a small percentage of Java classes, but browsing through them is helpful.

c. Validation/Verification of the design -

d. Coding -

Implement all classes.

e. Code verification -

Testing of all parts with drivers and stubs must occur as the classes are being developed. But, integrating the various components and testing their interaction is critical here. The sensitive components of a system may need to go through a rigorous mathematical proof to ensure their correctness.

f. Submit to production -

Let users use it. They may have already played with a prototype, but this is for real. Todays industry seems to advocate alpha and beta releases. Although there are some advantages to this, broad-based releases of incomplete with most likely incorrect components does not make sense to me! But, its the way things are today.

g. Maintenance -

Make corrections, make additions, and may be even redesign some parts.

Review Some Concepts

There are few term and concepts that we need to review to be sure we all speak the same language. I won't discuss the primitives in Java, but concepts and terms involved in using classes and objects.