In the first day I knew why are we paid more, that’s because of the software engineers handle complexity of the software with their brain. Then we move in to the basics of Object Oriented Design and analysis. Because we need to know what are the advantages of Object Oriented Programming. Basics emphasize those factors.
Software that are developed by software engineers are very complex, because
- It is very difficult to identify problem domain. Software is for particular domain. If we can’t identify that appropriately, it’s difficult to implement functionalities. Consider when develop a software for a bank about financial activities. Then we need to know how transaction handled and its procedure. Sometimes wicked problem arise, means can understand the real problem after it has a solution in initial state.
- To develop software we have limited resources like time, developers. That can be change time to time.
- It’s very difficult to see the progress of the project, so Project Managers can’t see the progress in regularly until publish a release. Therefore sometimes projects are stuck at final moment.
- Software should be flexible up to some extent, because clients expect a system that can change according to their wish before and after system completed. But there should not introduce new bugs to the existing system because of the change.
- There can be contradictory requirements like the project in tight dead line require engineering hours that are almost same as project duration. Here QA section require another time period for QA Engineering. There can be contradictory things may happen in software development.
- Impedance mismatch can be occurring between user and developer. When user tell something developer understand it in different way. Sometimes they can’t express clearly what they want. But it can be detecting after implement the system when the user sees the system.
- Software should be preserve non functional requirements like performance, scalability, maintainability, usability in appropriate manner. That will become a complex task.
- While developing the software requirement are changing. That is the most common issue in software industry. But because of the amount of resource we have new features should not change the source code, because that may introduce new bugs.
Applying appropriate software engineering for appropriate project phase is the way to reduce this complexity. In software these complexity handle by the software engineers. They provide nice simpler user interface to the users and all the complex things hide from this interface. Users don’t know how the functionality will happen and only knows what has happened.
Then I learnt about the attributes of the computer system.
- These complex systems can be handled by hierarchies. Here system divides into sub parts which are not complex as main problem. So by solving part by part we can achieve to the solution. Language is a good example, here basic element is letter. By combining letters it can create words then sentence then paragraph then chapter then story and finally a book. There are hierarchies in two types.
Is-a hierarchy (inheritance)
- Among these components relationships are occurring. Here the components in one sub system have intra-component linkage. Components among different subsystems there are inter-component linkage. When comparing these intra-component linkage is stronger than inter-component linkage because there components are in one sub system.
- It is very important to understand about the problem in Object Oriented basis. Object Oriented Analysis and Design appeared in here. Both of them talk about how to map real world entities to objects. In Object Oriented Analysis identify classes and objects when analyzing requirements and in Object Oriented Design add new classes, design patterns for easier the maintenance process.
- Abstraction, Encapsulation, Modularity and Hierarchy are major elements of object oriented model.
- Abstraction is a basic description about something, means it is a concept about something. Here we discussed about abstract things to identify that clearly. Assume vehicle class. It represents common view of a vehicle which has wheels, engine, doors, etc... and can drive, accelerate, brake etc… But it should describe in more specific format when talk about classes like car, bus, etc… Because it should represent special details that can be identified vehicle as car or bus. So when drawing class diagrams each specific class should have specific attributes and behaviors. These specific classes can inherit abstract class and can implement its common methods that are relevant tot each specific class. But it should not repeat same attributes and behaviors in two classes, because it is very difficult to maintain. If that code need to change it should change in every place where it repeat and source code become unnecessarily long. There are many abstract classes like animals, shoe, clothes, aircraft, etc… When represent abstract classes it doesn’t have hierarchies. Also in the situations where things can represent by abstract classes, don’t go to specific classes unnecessarily. It’s depend on the person’s view, means how the person look at the scenario.
- In Encapsulation we talked about the behaviors that are discussed earlier. Encapsulation means the implementation of those behaviors are hidden. Consider the example as submitAssignment() behavior that we face last four years. We can submit assignment by reading books, accessing internet, copying from another student, etc… Here we don’t show the implementation (how we do the assignment) to the lecturer. That means implementation is hidden.
- Then we talked about modularity of the software. Simply says software divide and conquer into manageable chunks, so the complexity can be reduced. These different modules are responsible for different activities. The reason for modularity is we can manage and implement each modules without or having minimum effect to other modules. Because modules are divided by reducing inter modular dependencies. So the changes are more effective and manageable.