start your own blog now!
 
Read other blogs...
[OOAD, AOP and Design Patterns]
All about Object Oriented Analysis (OOA), Object Oriented Design (OOD), Aspect Oriented Programming (AOP), Processes, Methodologies, Design Patterns and Frameworks
 

Sunday, December 21, 2003

Important Terminology for Architects and Designers

Today is Sunday. I didn't read, write or thought too much. So just for your (and of course mine) timepass I am giving some useful vocabulary for architects.

Surface Area
Surface Area is a term used to describe the way in which components interact withy one another in a defined way. It’s important to note that the greater the surface area, the more ways a change in one component can affect another.

Boundaries
Boundaries are the areas where two components interact.

Brittleness
Brittleness is the degree to which small changes will impact large portion of the system. Software tends to be unwieldy for many reasons, but a primary reason is brittleness. The distance between the ideal computers architects imagine and the real-world computer systems we know and work on is unfortunate and due in large part to brittleness.

Capabilities, Friction, and Layering
Capabilities are the non-functional, observable systems qualities including scalability, manageability, performance, availability, reliability, and security, which are defined in terms of context.

Friction refers to how much interaction occurs between to components. Friction is measured based on how a change in one component affects both components.

Layering is a hierarchy of separation.






posted by pandeypunit, 21:21 | link | comments

Friday, December 19, 2003

Object Oritented Estimation

Managing estimation and keeping with deadlines is always a art than a science. But it doesn't mean we can not utilize the science at all for project management. Robert Martin suggests us two charts that can be very useful hanging on wall -
"Velocity Chart" - illustrating, week by week, how much work is actually getting done?
"Story Points Chart" - week by week, how much work remains to be done in the project.

He also suggests - fitnesse.org, an acceptence testing framework.

In OOP we have standard UCP formula found in the book Applying Use Cases.

For those who doesn't have any idea here is the illustration - The UCP formula assigns each use case a complexity level of simple, medium or complex, based on either the number of scenarios in the uc or the number of analysis classes used to realize the use case (once that info is available). Each UC rank has a number of points associated with it. Actors are also ranked. For project estimation purposes, these points are added up and have a few other factors applied to them to convert them to man hours.

Sample "Velocity Chart"

Sample "Story Point Chart"

You can dig the details at -
http://www.sdmagazine.com/documents/s=8958/sdm0312f/sdm0312f.html



posted by pandeypunit, 13:53 | link | comments (1)

Thursday, December 18, 2003

Suggested Reading for Design Patterns (Beginners)

On the newsgroup few suggested following links, which I also found useful.

Object Design Tips 1

Object Design Tips 2

ObjectMentor.Com

You can also check the discussion thread on google groups. I guess, the link should work.

Patrick Rahmoune suggested this new coming book - "Design Patterns Explained: A New Perspective on Object-Oriented Design" by Alan

posted by pandeypunit, 15:42 | link | comments

Wednesday, December 17, 2003

My Tips For Understanding Design Patterns

Recently I saw a post on object newsgroup asking same good old question i.e. how to understand patterns. Here are my short and concise tips –

1. Read "Applying UML and Patterns" by Craig Larman once. Just take an overview.

2. Keep reading "Design Patterns: Element of Reusable Software Design" by GoF till you understand it. I think it will take around one month. Keep reading it like a novel, even if you are not able to understand.

I am sure, more the stuff and more you will be confused. So try to stick with these two.

Punit Pandey

posted by pandeypunit, 11:01 | link | comments (2)

Monday, December 15, 2003

Finally RSS Feed

I have created one more blog which will contain all my articles which I post here. What more, you can get RSS feed too. The link is Software Methodologies

posted by pandeypunit, 18:25 | link | comments

CRC Cards for Methods?

Yesterday, I was thinking that there is a way namely CRC Cards to visualize Classes and their responsibilities. But is there any way to visualize methods, their functionality and responsibility. I got following solutions from comp.object newsgroup.

* TDD (Test Driven Development)
* Writing down post condition, pre condition, parameters, return values
* CRC itself
* Flow charts, Nassi-Schneiderman charts, State Transition Diagrams and Decision Tables
* Sequence Diagram
* Object ineraction/sequence diagrams, message diagrams, state diagrams and lastly if you *must* (as even the UML authors suggest) activity diagrams.
* Use Case Scenerio extended in structure chart
* Skill Driven Notation

I'll try to write about this and provide some link in future. Menawhile you can go throuhg the thread at google groups here.

Punit Pandey








posted by pandeypunit, 12:47 | link | comments (1)

Friday, December 12, 2003

STRUCTURE OF A USE CASE DOCUMENT

This is what we use to document our use cases. Fortunately, most of the word document is generated from Rose.

1. Goal

2. Actor

3. Detailed Description :

main success scenario, extensions and variations

4. Special requirements

5. Interface specifications:

GUI draft, possibly made up with user

6. Use Case Design:

Basic choices + their justification. Design Patterns used. Trade offs.

7. Use Case View:

Class diagram, sequence diagram for main success scenario

8. Participating Objects:

Methods of classes with their documentation (pre/post condition)

Of course, the whole document is not written at the same time. The first sections are filled up during requirements analysis or analysis phase, while UC design and UC view are completed during design.

posted by pandeypunit, 16:22 | link | comments

Three Subtle Signs by Grady Bosch

First, Design Patterns

Second, multiple views of system

Third, aspect-oriented programming

See the detailed article Through the Looking Glass

posted by pandeypunit, 12:26 | link | comments

Aspect Oritented Programming

Hello Friends,

Today I was trying to understand Aspect Oriented Programming. At first it seems difficult but is not as difficult. I found this explaination quite useful -

In any program there will be small recurrent tasks that are spread out over your entire code base. These tasks can't be modularized in the current programming paradigm. The typical examples are logging or user authentication. Although you can obviously create classes for these tasks and place them in modules, they will be used throughout your entire code base. You might say that they are sandwiched into your code. Any change to this code will leave you doing a hunt through your entire code base. Aspect Oriented Programming allows you to write modules specifying where these tasks need to be sandwiched in and performs this "weaving" at compile time. This is my simple explanation, but I hope that it has helped.

I found these two articles really good introduction of AOP -

I want my AOP!, Part 1

Improve modularity with aspect-oriented programming

I have lots of questions right not in my mind. I hope someone can answer e.g.

How important is AOP?

Is AOP going to be common in near future?

How useful can AOP be?

Are there any successful projects already developed with AOP? And if yes, is the design available?

What are the commong aspects like logging?

How many in this group are using AOP in any of their projects?

posted by pandeypunit, 12:24 | link | comments

Thursday, December 11, 2003

What is Metaphor in XP

Metaphor is very important, a little creative, and hard to get right. The other XP practices often fit together so well they give a productivity boost, and the team forgets to use a metaphor.

However, all teams name their functions and modules along similar patterns. When we say "ClearConsole()", we don't really mean "remove all the knobs and levers from a small wooden cabinet with a machine inside". Most computer terms are metaphors - memory, mouse, etc. - all upgraded to jargon.

The System Metaphor practice (which every project should use, not just XP ones) tells us to deliberately create a unifying metaphor, and to name everything following it. This helps a team generate coherent jargon, and use it to discuss the project. It's the creative end of the naming conventions in the team's style guide.

Another name is "conceptual integrity."

posted by pandeypunit, 10:37 | link | comments

Wednesday, December 10, 2003

The Open-Closed Principle

This tip is the first in a series of articles dealing with the best practices of Object Oriented Design (OOD). In these articles, we will discuss several design techniques that lay the foundation of solid OOD practices. To begin, we will first introduce the cornerstone principle of OOD. All areas of study have such a principle; the core behind the entire science. For calculus, this is the Fundamental Theorem of Calculus. Newton's Three Laws of Motion lay the groundwork in physics. For OOD, the basis principle is the open-closed principle.

One thing is certain in all software development, all software changes during its life cycle. So, it is imperative that developers design software that is stable (i.e. does not change) in the face of ever changing functional requirements. To aid in this development, Bertrand Meyer gave us the open-closed principle, which states: Software entities should be open for extension, but closed for modification.

Software modules that satisfy the open-closed principle have two huge benefits. First, they are "open for extension". Meaning, the behavior of the modules can be altered to satisfy the changing requirements. Second, these modules are "closed for modification". The modules, themselves are not allowed to change.

posted by pandeypunit, 14:35 | link | comments

Tuesday, December 09, 2003

DILBERT ON EXTREME PROGRAMMING

posted by pandeypunit, 11:33 | link | comments

Monday, December 08, 2003

Object patterns.

Abstract Factory, Builder, Factory Method, Prototype, Singleton, Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy, Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor, RTTI Visitor, Stairway to Heaven, Polimorphic containers, Role playing.

  1. GOF Design Patterns
  2. GOF, Design Patterns: Elements of Reusable Object-Oriented Software
  3. Portland Pattern Repository
  4. Robert C. Martin's papers (Dual Interface Hierarchies, Private Interface)
  5. Visitor

posted by pandeypunit, 15:52 | link | comments

XP 12 Practices


Extreme Programming consists of the following 12 practices:

Essential Practices

Ken Auer and Roy Miller propose in their book ("Extreme Programming Applied", page 71), that although it is better to start with all 12 above mentioned practices, it is also feasable to start with only the following 6 practices. Ken and Roy call them essential practices.

  1. Planning Game
  2. Small Releases
  3. Testing
  4. Pair Programming
  5. Refactoring
  6. Continuous Integration

posted by pandeypunit, 13:52 | link | comments