Thursday, 10 April 2008
Big and Little Endian
In order to understand the concept of big and little endian, you need to understand memory. Fortunately, we only need a very high level abstraction for memory. You don't need to know all the little details of how memory works.
All you need to know about memory is that it's one large array. But one large array containing what? The array contains bytes. In computer organization, people don't use the term "index" to refer to the array locations. Instead, we use the term "address". "address" and "index" mean the same, so if you're getting confused, just think of "address" as "index".
Each address stores one element of the memory "array". Each element is typically one byte. There are some memory configurations where each address stores something besides a byte. For example, you might store a nybble or a bit. However, those are exceedingly rare, so for now, we make the broad assumption that all memory addresses store bytes.
I will sometimes say that memory is byte-addresseable. This is just a fancy way of saying that each address stores one byte. If I say memory is nybble-addressable, that means each memory address stores one nybble.
Storing Words in Memory
We've defined a word to mean 32 bits. This is the same as 4 bytes. Integers, single-precision floating point numbers, and MIPS instructions are all 32 bits long. How can we store these values into memory? After all, each memory address can store a single byte, not 4 bytes.
The answer is simple. We split the 32 bit quantity into 4 bytes. For example, suppose we have a 32 bit quantity, written as 90AB12CD16, which is hexadecimal. Since each hex digit is 4 bits, we need 8 hex digits to represent the 32 bit value.
So, the 4 bytes are: 90, AB, 12, CD where each byte requires 2 hex digits.
Big Endian :
In big endian, you store the most significant byte in the smallest address. Here's how it would look:
Address 1000 1001 1002 1003
Value 93 AB 12 CD
Little Endian
In little endian, you store the least significant byte in the smallest address. Here's how it would look:
Address 1000 1001 1002 1003
Value CD 12 AB 93
Which Way Makes Sense?
Different ISAs use different endianness. While one way may seem more natural to you (most people think big-endian is more natural), there is justification for either one.
For example, DEC and IBMs(?) are little endian, while Motorolas and Suns are big endian. MIPS processors allowed you to select a configuration where it would be big or little endian.
Why is endianness so important?
Suppose you are storing int values to a file, then you send the file to a machine which uses the opposite endianness and read in the value. You'll run into problems because of endianness. You'll read in reversed values that won't make sense.
Endianness is also a big issue when sending numbers over the network. Again, if you send a value from a machine of one endianness to a machine of the opposite endianness, you'll have problems. This is even worse over the network, because you might not be able to determine the endianness of the machine that sent you the data.
The solution is to send 4 byte quantities using network byte order which is arbitrarily picked to be one of the endianness (not sure if it's big or little, but it's one of them). If your machine has the same endianness as network byte order, then great, no change is needed. If not, then you must reverse the bytes.
Tuesday, 8 April 2008
Scientists - After Death in Heaven
Once all the scientists die and go to heaven. They decide to playhide-n-seek.
Unfortunately Einstein is the one who has the den.........
..He is supposed to count upto 100...and then start searching... ..
Everyone starts hiding except Newton......
...Newton just draws a square of 1 meter and stands in it right in front ofEinstein.
Einstein's counting 1,2,3......97, 98,99.... .100..... ...
He opens hiseyes and finds Newton standing in front....... .
Einstein says "newton's out..newton's out.....
"Newton denies and says "I am not out........I am not Newton......"All the scientists come out to see how he proves that he is not Newton.
Newton says "I am standing in a square of area 1m squared.....
That makes me Newton per meter squared..... . since one Newton per meter squared isone Pascal, I'm Pascal.....
Therefore Pascal is OUT.......!
Howwwwwwwwwwwwzzzzzzzzzzzz That !!!!!!!!!!!
Saturday, 5 April 2008
Linux\UNIX Commands
Providing some commands and besides that the explaination of the same.
Again, below is a listing of the Unix / Linux commands and a brief explanation of what each command does. Tried to sorted it, alphabetically.
I bet it is going to be very very useful and you would able to get all the content in one place collectively.
Command Description
ac :: Prints statistics about users' connect time.
alias ::Create a name for another command or long command string.
at :: Command scheduler.
base :: name Deletes any specified prefix from a string.
bash :: Command Bourne interpreter
bc :: Calculator.
bdiff :: Compare large files.
bfs :: Editor for large files.
bg :: Continues a program running in the background.
biff :: Enable / disable incoming mail notifications.
break:: Break out of while, for, foreach, or until loop.
bye :: Alias often used for the exit command.
cal :: Calendar
calendar :: Display appointments and reminders.
cancel :: Cancels a print job.
cat :: View and/or modify a file.
cc :: C compiler.
cd :: Change directory.
chdir :: Change directory.
checkeq :: Language processors to assist in describing equations.
checknr :: Check nroff and troff files for any errors.
chfn :: Modify your own information or if super user or root modify another users information.
chgrp :: Change a groups access to a file or directory.
chkey :: Change the secure RPC key pair.
chmod :: Change the permission of a file.
chown :: Change the ownership of a file.
chsh :: Change login shell.
cksum :: Display and calculate a CRC for files.
clear :: Clears screen.
cls :: Alias often used to clear a screen.
cmp :: Compare files.
col :: Reverse line-feeds filter.
comm :: Compare files and select or reject lines that are common.
compress :: Compress files on a computer.
continue :: Break out of while, for, foreach, or until loop.
cp :: Copy files.
cpio :: Creates archived CPIO files.
crontab :: Create and list files that you wish to run on a regular schedule.
csh :: Execute the C shell command interpreter
csplit :: Split files based on context.
ctags :: Create a tag file for use with ex and vi.
cu ::Calls or connects to another Unix system, terminal or non-Unix system.
curl :: Transfer a URL.
cut :: Cut out selected fields of each line of a file.
date :: Tells you the date and time in Unix.
dc :: An arbitrary precision arithmetic package.
df :: Display the available disk space for each mount.
deroff ::Removes nroff/troff, tbl, and eqn constructs.
diff :: Displays two files and prints the lines that are different.
dig ::DNS lookup utility.
dircmp :: Lists the different files when comparing directories.
dirname :: Deliver portions of path names.
dmesg :: Print or control the kernel ring buffer.
dos2unix :: Converts text files between DOS and Unix formats.
dpost :: Translates files created by troff into PostScript.
du :: Tells you how much space a file occupies.
echo ::Displays text after echo to the terminal.
ed ::Line oriented file editor.
egrep :: Search a file for a pattern using full regular expressions.
elm ::Program command used to send and receive e-mail.
emacs :: Text editor.
enable :: Enables / Disables LP printers.
env :: Displays environment variables.
eqn :: Language processors to assist in describing equations.
ex Line- :: editor mode of the vi text editor.
exit :: Exit from a program, shell or log you out of a Unix network.
expr :: Evaluate arguments as an expression.
fc :: The FC utility lists or edits and re-executes, commands previously entered to an interactive sh.
fg :: Continues a stopped job by running it in the foreground
fgrep :: Search a file for a fixed-character string.
file :: Tells you if the object you are looking at is a file or if it is a directory.
find :: Finds one or more files assuming that you know their approximate filenames.
findsmb :: List info about machines that respond to SMB name queries on a subnet.
fmt :: Simple text formatters.
fromdos :: Converts text files between DOS and Unix formats.
fsck :: Check and repair a Linux file system.
ftp :: Enables ftp access to another terminal.
getfacl :: Display discretionary file information.
gprof :: The gprof utility produces an execution profile of a program.
grep :: Finds text within a file.
groupadd :: Creates a new group account.
groupdel :: Enables a super user or root to remove a group.
groupmod :: Enables a super user or root to modify a group.
gunzip :: Expand compressed files.
gview :: A programmers text editor.
gvim ::A programmers text editor.
gzip :: Compress files.
halt :: Stop the computer.
hash :: Remove internal hash table.
hashstat :: Display the hash stats.
head :: Displays the first ten lines of a file, unless otherwise stated.
help :: If computer has online help documentation installed this command will display it.
history :: Display the history of commands typed.
ifconfig :: Sets up network interfaces.
ifdown :: take a network interface down
ifup :: bring a network interface up
join :: Joins command forms together.
keylogin :: Decrypt the user's secret key.
kill :: Cancels a job.
ksh :: Korn shell command interpreter.
ld :: Link-editor for object files.
ldd :: List dynamic dependencies of executable files or shared objects.
less :: Opposite of the more command.
lex :: Generate programs for lexical tasks.
link :: Calls the link function to create a link to a file.
ln :: Creates a link to a file.
locate :: List files in databases that match a pattern.
login :: Signs into a new system.
logname :: Returns users login name.
logout :: Logs out of a system.
lp :: Prints a file on System V systems.
lpadmin :: Configure the LP print service.
lpc :: Line printer control program.
lpq :: Lists the status of all the available printers.
lpr :: Submits print requests.
lprm :: Removes print requests from the print queue.
lpstat :: Lists status of the LP print services.
ls :: Lists the contents of a directory.
mach :: Display the processor type of the current host.
mail :: One of the ways that allows you to read/send E-Mail.
mailcompat :: Provide SunOS 4.x compatibility for the Solaris mailbox format.
mailx :: Mail interactive message processing system.
make :: Executes a list of shell commands associated with each target.
man :: Display a manual of a command.
mesg :: Control if non-root users can send text messages to you.
mkdir :: Create a directory.
mkfs :: Build a Linux file system, usually a hard disk partition.
more :: Displays text one screen at a time.
mount :: Disconnects a file systems and remote resources.
mt :: Magnetic tape control.
mv :: Renames a file or moves it from one directory to another directory.
nc :: TCP/IP swiss army knife.
neqn :: Language processors to assist in describing equations.
netstat :: Shows network status.
newalias :: Install new elm aliases for user and/or system.
newform :: Change the format of a text file.
newgrp :: Log into a new group.
nice :: Invokes a command with an altered scheduling priority.
niscat :: Display NIS+ tables and objects.
nischmod :: Change access rights on a NIS+ object.
nischown :: Change the owner of a NIS+ object.
nischttl :: Change the time to live value of a NIS+ object.
nisdefaults :: Display NIS+ default values.
nisgrep :: Utilities for searching NIS+ tables.
nismatch :: Utilities for searching NIS+ tables.
nispasswd :: Change NIS+ password information.
nistbladm :: NIS+ table administration command.
nmap :: Network exploration tool and security / port scanner.
nohup :: Runs a command even if the session is disconnected or the user logs out.
nroff :: Formats documents for display or line-printer.
nslookup :: Queries a name server for a host or domain lookup.
on :: Execute a command on a remote system, but with the local environment.
onintr :: Shell built-in functions to respond to (hardware) signals.
optisa :: Determine which variant instruction set is optimal to use.
pack Shrinks file into a compressed file.
pagesize :: Display the size of a page of memory in bytes, as returned by getpagesize.
passwd :: Allows you to change your password.
paste :: Merge corresponding or subsequent lines of files.
pax :: Read / write and writes lists of the members of archive files and copy directory hierarchies.
pcat :: Compresses file.
pg :: Files perusal filters for CRTs.
pgrep :: Examine the active processes on the system and reports the process :: IDs of the processes
pine :: Command line program for Internet News and Email.
ping :: Sends ICMP ECHO_REQUEST packets to network hosts.
pkill :: Examine the active processes on the system and reports the poweroff :: Stop the computer.
pr :: Formats a file to make it look better when printed.
printf :: Write formatted output.
ps :: Reports the process status.
pwd :: Print the current working directory.
quit :: Allows you to exit from a program, shell or log you out of a Unix network.
rcp :: Copies files from one computer to another computer.
reboot :: Stop the computer.
red :: Line oriented file editor.
rehash :: Recomputes the internal hash table of the contents of directories listed in the path.
remsh :: Runs a command on another computer.
repeat :: Shell built-in functions to repeatedly execute action(s) for a selected number of times.
rgview :: A programmers text editor.
rgvim :: A programmers text editor.
rlogin :: Establish a remote connection from your terminal to a remote machine.
rm :: Deletes a file without confirmation (by default).
rmail :: One of the ways that allows you to read/send E-Mail.
rmdir :: Deletes a directory.
rn :: Reads newsgroups.
route :: Show / manipulate the IP routing table.
rpcinfo :: Report RPC information.
rsh :: Runs a command on another computer.
rsync :: Faster, flexible replacement for rcp.
rview :: A programmers text editor.
rvim :: A programmers text editor.
s2p :: Convert a sed script into a Perl script.
sag :: Graphically displays the system activity data stored in a binary data file by a previous sar run.
sar :: Displays the activity for the CPU.
script ::Records everything printed on your screen.
sdiff :: Compares two files, side-by-side.
sed :: Allows you to use pre-recorded commands to make changes to text.
sendmail :: Sends mail over the Internet.
set :: Set the value of an environment variable.
setenv :: Set the value of an environment variable.
setfacl :: Modify the Access Control List (ACL) for a file or files.
settime :: Change file access and modification time.
sftp :: Secure file transfer program.
sh :: Runs or processes jobs through the Bourne shell.
shred :: Delete a file securely, first overwriting it to hide its contents.
shutdown :: Turn off the computer immediately or at a specified time.
sleep :: Waits a x amount of seconds.
slogin :: OpenSSH SSH client (remote login program).
smbclient :: An ftp-like client to access SMB/CIFS resources on servers.
sort :: Sorts the lines in a text file.
spell :: Looks through a text file and reports any words that it finds in the text file that are not in the dictionary.
split :: Split a file into pieces.
stat :: Display file or filesystem status.
stop :: Control process execution.
strip :: Discard symbols from object files.
stty :: Sets options for your terminal.
su :: Become super user or another user.
sysinfo :: Get and set system information strings.
sysklogd :: Linux system logging utilities.
tabs :: Set tabs on a terminal.
tail :: Delivers the last part of the file.
talk :: Talk with other logged in users.
tac :: Concatenate and print files in reverse.
tar :: Create tape archives and add or extract files.
tbl :: Preprocessor for formatting tables for nroff or troff.
tcopy :: Copy a magnetic tape.
tcpdump :: Dump traffic on a network.
tee :: Read from an input and write to a standard output or file.
telnet :: Uses the telnet protocol to connect to another remote computer.
time :: Used to time a simple command.
timex :: The timex command times a command; reports process data and system activity.
todos :: Converts text files between DOS and Unix formats.
top :: Display Linux tasks.
touch :: Change file access and modification time.
tput :: Initialize a terminal or query terminfo database.
tr :: Translate characters.
traceroute :: Print the route packets take to network host.
troff :: Typeset or format documents.
ul ::Reads the named filenames or terminal and does underlining.
umask :: Get or set the file mode creation mask.
unalias :: Remove an alias.
unhash :: Remove internal hash table.
uname :: Print name of current system.
uncompress :: Uncompressed compressed files.
uniq :: Report or filter out repeated lines in a file.
unmount :: Crates a file systems and remote resources.
unpack :: Expands a compressed file.
untar :: Create tape archives and add or extract files.
until :: Execute a set of actions while/until conditions are evaluated TRUE.
useradd :: Create a new user or updates default new user information.
userdel :: Remove a users account.
usermod :: Modify a users account.
vacation :: Reply to mail automatically.
vedit :: Screen-oriented (visual) display editor based on ex.
vgrind :: Grind nice program listings
vi :: Screen-oriented (visual) display editor based on ex.
vim :: A programmers text editor.
view :: A programmers text editor.
w :: Show who is logged on and what they are doing.
wait :: Await process completion.
wc :: Displays a count of lines, words, and characters in a file
whereis :: Locate a binary, source, and manual page files for a command.
while :: Repetitively execute a set of actions while/until conditions are evaluated TRUE.
which ::Locate a command.
who ::Displays who is on the system.
whois :: Internet user name directory service.
write ::Send a message to another user.
X :: Execute the X windows system.
xfd ::Display all the characters in an X font.
xlsfonts :: Server font list displayer for X.
xset ::User preference utility for X.
xterm :: Terminal emulator for X.
xrdb :: X server resource database utility.
yacc :: Short for yet another compiler-compiler, yacc is a compiler.
yes :: Repeatedly output a line with all specified STRING(s), or 'y'.
yppasswd :: Changes network password in the NIS database.
zcat :: Compress files.
Debugging with LINUX environment
Introduction
Linux environment generally used the GNU debugger, or gdb to the shell. Gdb lets you see the internal structure of a program, print out variable values, set breakpoints and single step through source code. It makes an extremely powerful tool for fixing problems in program code. In this article , Let's discuss how to use the .
The Linux development environment has several debugging alternatives. This
article I also explore debugging tools available for debugging applications, ranging
from simple print-statement to specialized tools (e.g. memory-debugging).
Print statements
Addition of printf() statements to your code is a traditional and time-honored way
to debug code. Downside is that you will need to modify and recompile the code
whenever you want more or less debug information.
Strace utility
Strace will output all the kernel calls that the application does and is a great way to find
e.g. what file the program is trying to access and whether it succeeded. For instance
calls to read() and write() will show how much data program tried to read/write and
how much actually was transferred, it also shows the beginning of the data in question.
You can use this without recompilations and it works on any program which you can
run.
Ltrace utility
Ltrace will output all the dynamic library function calls that the application does. It
can also show system calls like ’strace’.
Using GDB debugger
With gdb debugger you can examine all the symbols in the program and program runtime
state and follow program function calls. If trace utilities and the source code don’t
give you enough information to solve the problem, debugger is the next step. Gdb is
a console tool, but there are some nice debugging GUIs available that work on top of
gdb. One such is ddd.
Gdb can help with debugging programs written in C, C++, Fortran, Java, Chill, assembly
and Modula-2. You need to have compiled these programs with the gnu compiler
collection (gcc) tools.
Besides supporting multiple languages gdb also supports multiple hardware architectures,
including several embedded hardware architectures. It’s also possible to compile
a special version of GDB for debugging (Linux) kernel code.
Running gdb
Gdb is run from the shell with the command 'gdb' with the program name as a parameter, for example 'gdb file, or you can use the file command once inside gdb to load a program for debugging, for example 'file file. Both of these assume you execute the commands from the same directory as the program. Once loaded, the program can be started with the gdb command 'run'.
Preparing for GDB use
You need to compile all the C/C++ code you want to debug with debugging information
included into the binary (use ’-g’ and do not use ’-fomit-frame-pointer’ option when
compiling the code) and the code may not be stripped of symbols (do not use ’-s’ flag
in the compilation). Note that all the libraries used by the program should also be
compiled this way as missing stack frame pointer can confuse GDB.
It’s better if you use static linking (e.g. use ’-static’ option in your Makefile) because
that way gdb won’t have trouble finding the symbols for the libraries program uses (for
example if you use different libraries with your program than what your compilation
machine normally uses).
Before you can get started, the program you want to debug has to be compiled with debugging information in it. This is so gdb can work out the variables, lines and functions being used. To do this, compile your program under gcc (or g++) with an extra '-g' option:
gcc -g file.cpp -o file
Using GDB
There are two ways to use a debugger:
- Using debugger to examine the code runtime behavior. You start ’gdb’ with the
program binary (’gdb
run the program inside the gdb with ’run
already running instance of the program with ’attach
when you don’t have working gdb inside the debugging environment. Then you
can set breakpoints, examine the code, variables, stack etc and call the program
functions.
- Using debugger to examine a process post-mortem ’core’ dump. You start ’gdb’
with the program binary and core dump (’gdb
code directory. You can examine where the program crashed and what was the
state of all the program variables. If your program crashes, but doesn’t produce
a core file, check ’ulimit -a’ to see whether your environment allows core files
and fix it with ’ulimit -c unlimited’.
The downside of debugger approach is that debug versions of the binaries are large and
statically linked debug ones are huge. If the target doesn’t have enough memory for
this, you can use ’gdbserver’ and stripped binaries on the target. On the host on which
you do the debugging, you use gdb with ’target remote’ option and give the host gdb
the binary with all the debugging symbols.
Short introduction to use of gdb
You get back to GDB prompt when your program either:
- Crashes.
- Code execution reaches a breakpoint.
- You suspend or otherwise send a signal to the program.
On latter two cases you can use ’cont’ to continue the program execution.
In the GDB prompt you can do one of the following:
- Set a breakpoint with ’break
saying ’delete
- Examine current program execution trace with ’bt’, which will show you where
the program execution was interrupted (see above), how it got there and what
were the function arguments.
- Move up and down in the execution stack frame by typing ’up’ or ’down’.
- Examine program state with either ’info locals’ which shows you the state of
variables in the current context (function) or use ’print
you a value of given variable or function. Any valid C expression can be used,
even function calls!
- View your program code with ’list
given function.
You can ’step’ through the program code with following commands:
- ’step’ will execute the current line and go to next command. If code line is a
function call, step will enter the function.
- ’next’ works like ’step’ but function calls are executed as single instruction.
- ’finish’ will execute to the end of current scope (function).
- ’cont’ will continue program execution.
Typing return will repeat the previous command. Gdb can also complete function and
variable names with TAB key.
When optimization is used in code compilation, variable values shown by gdb may
sometimes be valid only for variables used on the line that program executed lastly 1,
not for the whole scope in where the variables are declared. Use of inlines especially
in C++ code (e.g. methods with their body in the header file) may confuse gdb so that
it shows either a wrong filename or line for the fault.
In these cases it’s better not to optimize the code so much, use only ’-O’ optimization
flag, and forbid inlining completely with the ’-fno-default-inline’ compilation flag.
Friday, 4 April 2008
Frequently asked interview question in Unix
I bet if any one would get prepared with these questions . One would have win the half of the battle of Interview war.
1) Advantages/disadvantages of script vs compiled program.
2) Name a replacement for PHP/Perl/MySQL/Linux/Apache and show main differences.
3) Why have you choosen such a combination of products?
4) Differences between two last MySQL versions. Which one would you choose and when/why?
5) Main differences between Apache 1.x and 2.x. Why is 2.x not so popular?
Which one would you choose and when/why?
6) Which Linux distros do you have experience with?
7) Which distro you prefer? Why?
8) Which tool would you use to update Debian / Slackware / RedHat / Mandrake / SuSE ?9)
You're asked to write an Apache module. What would you do?
10) Which tool do you prefer for Apache log reports?
11) What does 'route' command do?
12) Differnces between ipchains and iptables.
13) What's eth0, ppp0, wlan0, ttyS0, etc.
14) What are different directories in / for?
15) Partitioning scheme for new webserver. Why?
16) What is a Make file?
17) Could you tell something about the Unix System Kernel?
18) Difference between the fork(), exec() and system() . system calls?
19)How can you tell what shell you are running on UNIX system?
20)What is ‘the principle of locality’?What are conditions for a machine to support Demand Paging?
21)What are conditions on which deadlock can occur while swapping the processes?
22)What are the processes that are not bothered by the swapper? Give Reason.
23)How the Swapper works?
23)What do you mean by u-area (user area) or u-block?
24)What is a Region?
25)What scheme does the Kernel in Unix System V follow while choosing a swap device among the multiple swap devices?
26)What is the main goal of the Memory Management?
27)What is the difference between Swapping and ?
28)List the system calls used for process management?
29)How do you change File Access Permissions?
Refer the sites...
http://www.geekinterview.com/Interview-Questions/Operating-System/UNIX
Wednesday, 2 April 2008
UML
Here I have tried to simplify the keyword UML.
In software engineering, whenever the pictorial graphical representation is required, as process document or some application architecture or design need to be elaborated, then it is done with the help of UML. Simply defining, the Unified Modeling Language (UML) is a standardized visual specification language for object modeling.
Defining in other terms , UML is a general-purpose modeling language that includes a graphical notation used to create an abstract model of a system, referred to as a UML model.
Going into bit detail description, UML is officially defined at the Object Management Group (OMG) by the UML metamodel, a Meta-Object Facility metamodel (MOF). Like other MOF-based specifications, the UML metamodel and UML models may be serialized in XML. UML was designed to specify, visualize, construct, and document software-intensive systems.
To understand more about the language, I have just framed and complied some general FAQ sort. I believe just going thru these answered questions, is enough to develop the basic understanding of the UML.
First of all, in the layman termed, basic query.
What is UML?
- Unified Modeling Language (UML) is the industry-standard language for specifying, visualizing, constructing, and documenting the artifacts of software systems. Using UML, programmers and application architects can make a blueprint of a project, which, in turn, makes the actual software development process easier.
What can I use UML for?
- UML was designed with these primary purposes in mind:
· Business process modeling with use cases
· Class and object modeling
· Component modeling
· Distribution and deployment modeling
What's the actual need of UML, isn't it enough to write some thing about our application's design and architecture, somewhere in documentation, without using the pictorial symbols of UML?
- While it's certainly possible to describe interrelated processes and code architecture in words, many people prefer to use a diagram to visualize the relationship of elements to one another. UML is a standard way to create these diagrams. As a result, it makes it easier for programmers and software architects to communicate.
Different types of diagrams available in UML?
- UML provides many different models of a system. The following is a list of then:
1) The Use Case Diagrams - A use case is a description of the system's behavior from a user's viewpoint.
2) The Class Diagrams - "What objects do we need? How will they be related?"
3) Collaboration Diagrams - "How will the objects interact?"
4) Sequence Diagrams - "How will the objects interact?"
5) State Diagrams - "What state should our object be in"
6) Package Diagrams - "How are we going to modularize our development?"
7) Component Diagrams - "How will our software components be related?"
8) Deployment Diagrams - "How will the software be deployed?"
What is a "use case"?
- A complete end-to-end business process that satisfies the needs of a user.
What are different categories of use cases?
- Detail Level: - High level / ExpandedTask Level: - Super / Sub (Abstract; Equal Alternatives; Complete v. Partial)Importance: - Primary / Secondary (use Secondary for exceptional processes)Abstraction: - Essential / Real
What is the difference between a real and essential use case?
- Essential - describes the "essence" of the problem; technology independent real - good for GUI designing; shows problem as related to technology decisions.
In a System Sequence Diagram, what is a System Event?
- It is from the expanded use case. It is an actor action the system directly responds to.
Give an example of a situation which a State Diagram could effectively model.
- Think of a cake and its different stages through the baking process: dough, baked, burned.
For what are Operations Contracts written?
- System Events.
In an Operations Contract's postconditions, four types of activities are specified. What are they?
- They are:
· Instances created
· Associations formed
· Associations broken
· Attributes changed
What does an Operations Contract do?
-Provides a snapshot of the System's state before and after a System Event. It is not interested in the Event's specific behavior.
What does a Collaboration Diagram (or Sequence Event, depending on the process) model?
- A System Event's behavior.
How does one model a class in a Collaboration Diagram? An instance?
- A box will represent both; however, a class is written as MyClass whereas an instance is written as myInstance:MyClass.
What are the three parts of a class in a Class Diagram?
- Name, Attributes, Methods.
In Analysis, we are interested in documenting concepts within the relevant problem domain. What is a concept?
- A person, place, thing, or idea that relates to the problem domain. They are candidates for objects.
Does a concept HAVE to become a class in Design?
- No.
In a Class Diagram, what does a line with an arrow from one class to another denote?
- Attribute visibility.
What are the four types of visibility between objects?
- Local
Parameter
Attribute
Global.
When do you use inheritance as opposed to aggregation?
- An aggregation is a "has a" relationship, and it is represented in the UML by a clear diamond.
When would I prefer to use composition rather than aggregation?
- Composition is a stronger form of aggregation. The object which is "contained" in another object is expected to live and die with the object which "contains" it. Composition is represented in the UML by a darkened diamond.
Is the UML a process, method, or notation?
- It is a notation. A process is Objectory, Booch, OMT, or the Unified Process. A process and a notation together make an OO method.
Friday, 28 March 2008
Design Patterns in OOPs
For starting with Design Patterns, pre-requiste is one should aware with the Object oriented concepts.
Here, we will try to simplify the term and purpose of the Design Pattern.
First normal and very common query could be, What is Design Patterns, why they are used?
In a simple layman term, a design pattern is a general reusable solution to a commonly occurring problem in software design.
Defining Design Patterns more descriptively...
In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code.
It is a simply a description for how to solve a problem that can be used in many different situations.
Design patterns is used to speed up the development process by providing tested, proven development methods or paradigms. Effective software design requires considering issues that may not become visible until later in the implementation.
Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.
Digging into depth,
Design Pattern is categoried in three different sub patterns.
Creational Patterns
Structural Patterns
Behavioral Patterns.
Creation Patterns
This design pattern is all about class instantiation.
This pattern can be further divided into class-creation patterns and object-creational patterns.
Abstract Factory : Creates an instance of several families of classes
Factory : Creates an instance of several derived classes
Builder : Separates object construction from its representation
Prototype : A fully initialized instance to be copied or cloned
Singleton : A class of which only a single instance can exist
Structural patterns
This design patterns is all about Class and Object composition. Structural class-creation patterns use inheritance to compose interfaces. Structural object-patterns define ways to compose objects to obtain new functionality.
Adaptor : Match interfaces of different classes
Bridge : Separates an object’s interface from its implementation
Decorator : Add responsibilities to objects dynamically
Facade : A single class that represents an entire subsystem
Proxy : An object representing another object
Behavioral patterns
This design patterns is all about Class's objects communication. Behavioral patterns are those patterns that are most specifically concerned with communication between objects.
Chain of responsibilty : A way of passing a request between a chain of objects
Command : Encapsulate a command request as an object
Interpreter : A way to include language elements in a program
Iterator : Sequentially access the elements of a collection
Observer : A way of notifying change to a number of classes
State : Alter an object's behavior when its state changes
Visitor : Defines a new operation to a class without change
Now we will pick the popular and commonly used design pattern and explain in detail.
Staring with the Factory Pattern.
What is a "factory" and why would you want to use one?
A factory, in this context, is a piece of software that implements one of the "factory" design patterns introduced . In general, a factory implementation is useful when you need one object to control the creation of and/or access to other objects. By using a factory in RMI, you can reduce the number of objects that you need to register with the RMI registry.
The Bank
The Library
These two example is sufficient to understand the actual process of the Factory Patterns. These examples are from the real life.
Let's take the example, commonly illustrated in the text book, GoF.
Widgets in a GUI Environment.
This example explains , how an Abstract Factory can be used to create widgets for a GUI environment. By designing the client to use the Abstract Factory interface, different factories can be created to generate different sets of widgets without requiring changes to the clients. This example is not intended to illustrate a useful implementation of Abstract Factory, as Java's AWT and Swing do the work for you, but it does show how easily design patterns can be implemented in RMI.
One other point to notice is how the pattern is split between client and server. This split was arbitrarily chosen, and with RMIs object-oriented nature you could decide to make the split in the pattern elsewhere.
In General , this pattern consists of two class hierarchies, one of Products, and one of Creators. Each ConcreteCreator class creates instances of specific ConcreteProduct classes using a factory method.
The factory pattern can help solve your application issues. For example, developers often must reply to users based on each user’s machine, creating multiple hardware issues. The factory pattern can streamline the process. The concept is simple, but the solutions created with the factory pattern are powerful.
For more understanding, let's take one more example.
Communications breakdown
Consider the example of a data collection application where various field devices supply data to the application via TCP/IP sockets. The application was originally written to communicate with one device but was expanded when the company produced a newer version. Unfortunately, this new hardware did not speak the same language as the previous version. Marketing required the application to support both hardware versions, since customers might buy new units and install them in tandem with older units. The factory pattern eased the burden of supporting multiple device types.
In short and effective explanation of fatory pattern is :
=> if we have a super class and n sub-classes, and based on data provided, we have to return the object of one of the sub-classes, we use a factory pattern.
Now, we will focus on the positive and negative points on using the Factory Patterns.
Positives:
-Eliminates the need to bind application-specific classes into your code
-Provides hooks for subclassing. Creating objects inside a class with a factory method is always more flexible than creating an object directly. This method gives subclasses a hook for providing an extended version of an object.
-Connects parallel heirarchies. Factory method localises knowledge of which classes belong together. Parallel class heirarchies result when a class delegates some of its responsibilities to a separate class.
Negatives:
-Clients might have to subclass the Creator class just to create a particular Concreate object.
