Object-Oriented Software Engineering and UML, software engineering uml
Basic concepts of Software Engineering
Software Crisis
The functions, scale, and complexity of a software increase, and the complexity of the software reaches the level that cannot be controlled by its developers.
This situation leads to serious consequences: Software Reliability reduction, low development efficiency, and extremely difficult maintenance
This puts software developers in trouble and is called a "software crisis"
Solve software crisis
Research in the software development industry
1. Study of Programming Methodology
Structured Program Design Method
Object-Oriented Programming
2. Research on Software Engineering
Develop and maintain software using engineering methods, and perform Engineering Management for software production processes.
3. Other aspects
Concurrent Program Design
Data structures and algorithms
Programming Language ......
Definition of Software Engineering
In summary, software engineering is an engineering discipline that guides computer software development and maintenance. We use engineering methods to develop and maintain software, and combine time-tested and proven engineering management technologies with the best current technical methods, developing high-quality software economically and effectively maintaining it is software engineering.
Software Engineering content
The whole process of the software life cycle and the engineering methods, technical rules, document specifications, technical support, management systems, personnel organization, and quality assurance systems of each specific stage of the software. Each software developer must act in accordance with the unified requirements of the project, and cannot freely play. Sound documents that comply with engineering specifications should be generated in each development phase. Software products are the sum of these documents, not just programs.
Three elements of Software Engineering
1. Method: the technical method for completing various tasks of software development, providing the "how to do" Technology for software development
2. Tools: An automated or semi-automatic Software Engineering supporting environment provided for use
3. process: in order to obtain the framework of a series of tasks to be completed by high-quality software, it specifies the steps to complete each task, how to combine software engineering methods with software tools, rational and timely Software Development
Methods, tools, and processes we use in the project
Method: Object-oriented Method
Tool: EA
Process: A Prototype-Based Incremental iteration software development process
Software lifecycle (1)
1. feasibility analysis stage
Main tasks of this phase: the system analyst, with the help of the user, conducts an in-depth investigation into the user's requirements and existing environment and writes a survey report, it studies and demonstrates the feasibility of the project from the perspectives of economic feasibility, technical feasibility, operational feasibility and Legal feasibility, that is, whether the project is worth doing and whether there are feasible solutions.
Main results of this phase: feasibility analysis report.
2. Demand analysis stage
Main tasks of this phase: system analysts and users repeatedly discuss and discuss, fully exchange information, determine what the software system is to be developed, and determine the functional and non-functional requirements of the software system, use some methods and tools to component the software system model and compile the Software Requirement Specification.
Major outcome of this phase: Software Requirements Specification (SRS ).
Software lifecycle (2)
3. System Design Phase
The main tasks of this phase are to design the overall framework, detailed functional design, and database for the entire system based on the functional and non-functional requirements identified in the demand analysis phase. Simply put, the demand analysis stage answers the question "What to do", while the system design stage answers the question "How to do. The design phase is divided into outline design and detailed design. The Outline Design defines the main components of the system and their relationships based on the results of requirement analysis. The detailed design defines the internal structural details of each system component.
Main results of this phase: Brief design instructions, detailed design instructions, and database design instructions.
4. System implementation stage: it is also called the encoding stage.
The main task of this phase: according to the detailed design manual, the detailed design results are converted into the source code that can be run by the machine using a selected programming language, which is a process of programming and debugging.
Main results of this phase: source code that passes the unit test.
Software lifecycle (III)
5. Test phase
Main tasks of this phase: use various software testing methods and testing tools to minimize software bugs.
Main outcome of this phase: Software Test Report.
6. Maintenance Phase
Main tasks of this phase: the system can meet users' needs permanently through various necessary maintenance activities.
There are four types of maintenance activities:
Corrective maintenance: diagnoses and corrects software errors found during system use.
Adaptive maintenance: modify the software to adapt to environment changes.
Excellent maintenance: improve or expand the software as required by the user to improve the software.
Preventive Maintenance: modify the software to prepare for future maintenance activities.
Main results of this phase: software issue reports, software change records, and software maintenance records.
Software Development Process
The software development process is a collection of activities and Software Generation results during software system development in the software life cycle. The Software Process Model describes the activities, roles, products, and their relationships in the software development process.
Currently, there are several software process models with different characteristics and are suitable for different development methods. For example, waterfall model, cycle model, spiral model, incremental model and fountain model.
Different software development methods and software development models require different engineering systems. From a historical perspective, the most commonly used methods are structured methods and waterfall models. Object-Oriented Methods and fountain models represent the mainstream technologies.
Unified Modeling Language (UML)
Just like building a tall building, we need to draw a building diagram to build a model. During the system analysis and design phase of software system development, we usually use modeling technology to build a model for the system. Many modeling technologies have emerged during the development of software engineering. In the end, IBM's Unified Modeling Language UML has become a unified modeling technology recognized by the industry.
Unified Modeling Language (UML) is a visual Modeling Language used for software system design and architecture Modeling. It displays all aspects of the software system through various diagrams.
There are many types of UML diagrams. For programmers, class diagrams are the most frequently used. A class chart is a static model used to display the classes and interfaces in the system and their static structures and relationships. The most basic elements in a class diagram are classes and interfaces. After the software designer designs the class diagram, the programmer can use the code to implement the content contained in the class diagram.
Use a class chart to represent a link
There is a certain relationship between classes and classes, classes and interfaces, interfaces and interfaces. There are six types: are the implementation relationship, generalization relationship, association relationship, dependency relationship, aggregation relationship, and combination relationship, respectively,
1. Implementation relationships refer to the relationships between interfaces and their implementation classes.
2. Generalization refers to the inheritance relationship between objects.
3. Association refers to the connection between an object and an object. It allows an object to know the attributes and methods of another object. In Java, the code of the association is a reference of an object containing another object. Associations are unidirectional and bidirectional.
4. Dependency is a weak Association. The specific code of dependency in Java is represented by the local variables, methods, or constructor parameters, and return values of methods in the constructor B is, or A calls the static method of B.
5. Aggregation is a special case of association. It reflects the relationship between the whole and the part, that is, the relationship of "has. At this time, the whole and the part are separated. They can have their own lifecycles. Some can belong to multiple overall objects or share multiple overall objects, therefore, an aggregation relationship is also called a shared relationship. (For example, department and employee)
6. Composition is also a special case of association. It also reflects the inclusion relationship between the whole and the part, that is, the relationship of "contains. However, at this time, the whole and the part are inseparable, and the part cannot be shared with others as a whole. As a whole, the object is responsible for the object's lifecycle. This relationship is stronger than aggregation, also known as strong aggregation. (For example, company and Department)
Object-oriented System Analysis and Design
In object-oriented technology, the process of building the entire software system is often referred to as Object-Oriented Analysis and Design (OOAD ). For the software system we want to develop, OOAD solves what the system is (object-oriented system analysis, that is, OOA) and how to do it (object-oriented system design, that is, OOD ), OOP only implements the system using programming languages.
In general, OOAD is generally done by demand analysts, system analysts, and System Architects, while OOP is done by programmers. However, for programmers, mastering OOD technology is particularly important for writing high-quality code and personal technical growth and career planning.