What I learnt from Advanced Software Engineering Lec1
Software Products are intangible as well as inherently complex. So Software Engineer’s task to model the real world entities is tough than working at other fields. They are paid well as they handle the complexities of modeling the real world.
Why software’s are Complex?
Software Engineer has to hide the complexity of the system from the end user’s and provides functionalities needed through simple interfaces. Domain knowledge is changing rapidly making the software more complex. There is mismatch of understanding about the software system between developer and user. Requirements of a software system often change during its development
Attributes of Complex systems?
Complex systems make hierarchies. This hides complexity from the user. Hierarchy is the basic means to provide extensibility of software modules and helps in increasing the reuse of modules. Levels can be identifies through the hierarchies. A complex system is composed of interrelated subsystems that have in turn their own subsystems, and so on, until some lowest level of elementary components is reached. Normally in a system, inter subsystem communication is less and intra subsystem communication is high.
Human’s memorizing capacity is low. Humans have limitations with dealing with the complexities The complexity of the software systems is increasing, yet there are basic limits upon humans ability to cope with this complexity.
OO helps to organize the inherent complexity of software systems. Object-orientation is so called because it sees things that are part of the real world as objects. It makes Software Engineer’s life easy than working with procedural languages.
- Extensibility - Adding new features and modifying some existing ones
- Simplicity - Software objects model real world objects, so the complexity is reduced and the program structure is very clear
- Maintainability - Objects can be maintained separately, making locating and fixing problems easier
- Flexibility - No need to change from scratch. But it is necessary to manage properly without introducing new bugs.
- Reusability - Objects can be reused in different programs
- Modifiability - It is easy to make minor changes in the data representation or the procedures.
- Entity abstraction: The object presents a useful model of an entity in the problem-domain
- Action abstraction: The object provides a generalised set of operations, all of which perform the same kind of function.
- Virtual machine abstraction: The object groups together operations that are all used by some superior level of control
- Coincidental abstraction: The object packages operations that have no relation to each other.
- You can create an abstraction of a animal with characteristics, such as color, height, and weight, and actions such as grow, eat and move. The characteristics are called properties, and the actions are called methods.
Classes are blueprints for Object. Objects are instance of classes.
Each object-oriented object can't see each other as they having a shield around it. But they can exchange things though. It separates the external aspects of an object from the internal implementation details of the object, which are hidden from other objects. The object encapsulates both data and the logical procedures required to manipulate the data.
This should not depend on the internal implementation of the classes. Classes are normally focuses on implementation of behaviors.
Hierarchy is the basic means to provide extensibility of software modules and helps in increasing the reuse of modules. They can be divided in to two parts: is a, part.
Examples: Keyboard is a part of computer; Graphic card is an electronic card
Difference of functional and non functional requirements
Functional requirements – Specifies essential function that a system or component must be able to perform
Non functional requirements – It specifies additional features other than essentials. Specifies how a system must behave, it is a constraint upon the systems behavior
Wicked problems are problems which, by their very nature, cannot be completely specified or even understood. Problem understanding develops with the proposed solutions to these problems and implementing the solutions. The existence of the solution may change the nature of the problem