CSC 520 - Advanced Object Oriented Programming, Spring 2018 Overview
Brief History 1960: Simula first object oriented language developed by researchers at the Norwegian Computing Center. 1970: Alan Kay and his research group developed a computer named Dynabook and the first pure object-oriented programming language Smalltalk, for programming the Dynabook. 1980s: Grady Booch published a paper titled Object Oriented Design that presented the programming language Ada.
Object-Oriented Programming (OOP) a method of implementation in which programs are organized as cooperative collections of objects, each of which represents an instance of some class, and whose classes are all members of a hierarchy of classes united via inheritance relationships Grady Booch
Features of Object-Oriented Programming Bottom-up approach in program design Programs organized around objects, grouped in classes Focus on data and methods that operate on the object s data Interaction between objects through message passing Reusability of design through creation of new classes by adding features to existing classes
Object-Oriented Analysis (OOA) Object-oriented analysis is a method of analysis that examines requirements from the perspective of the classes and objects found in the vocabulary of the problem domain. Grady Booch
Tasks in Object-Oriented Analysis Identifying objects Organizing the objects by creating an object model diagram Defining the attributes of objects Defining the behavior of objects Describing how the objects interact
Object-Oriented Design (OOD) a method of design encompassing the process of object-oriented decomposition and a notation for depicting both logical and physical as well as static and dynamic models of the system under design. Grady Booch
Object-Oriented Design (OOD) Object-Oriented Design involves implementation of the conceptual model produced during object-oriented analysis. The analysis model, which is technology-independent, is mapped to how the system can be built with concrete technologies The implementation details usually include: Restructuring the class data (if necessary) Implementation of the methods Implementation of the control Implementation of the associations
Software Development Methodology A software development methodology is a repeatable process that can be followed through the software development lifecycle. A software methodology should specify what should be produced as the process is followed. A software methodology usually includes techniques for resource management, planning, scheduling and other management tasks. Most software development methodologies are designed for teams of developers producing large amounts of software.
Benefits of Software Development Methodologies Can help impose discipline on the coding process. Can increase understanding of the problem and improve the quality of the solution. Can help find conceptual and practical mistakes before they are coded. Can help produce code that is more extensible, more reusable, and easier to debug.
Benefits of Methodologies At Large Scale Documentation Reduced latency Improved chances to deliver on time and within budget Better communication between users, sales people, managers, and developers Repeatability
Issues Methodologies Address Planning Scheduling Resourcing Workflows Activities Roles Artifacts Education
Classical Phases in Software Production Requirements Analysis Design Specification Implementation Testing Deployment Maintenance
Requirements Phase Requirements capture is about discovering what we are to achieve. It has two main aspects: Business modeling: understanding the context in which the software will operate. System requirements modeling (functional specification): deciding the capabilities the software will have. Questions: What is the context? What are we trying to achieve?
Analysis Phase Analysis is understanding and verifying the relevant entities, their properties, and their inter-relationships. Questions: What entities are we dealing with? How can we be sure we have the correct entities?
Design Phase Design is making decisions about the software and how it will be deployed. System design involves breaking the system into logical subsystems and physical subsystems, deciding how subsystems will communicate, and choosing the technologies. Subsystem design is about deciding how to make a logical subsystem into effective, efficient, and feasible code. Questions: How are we going to solve the problem? What hardware and software will the finished system need? How are we going to implement the solution?
Specification Phase A specification is an unambiguous description of the way the components of the software system should be used and how they behave if used properly. Questions: What rules govern the interfaces between system components? Can we remove ambiguity and ensure correctness?
Implementation Phase Implementation is about writing the code form the subsystems. Questions: How can we code the components to meet the specification?
Testing Phase Testing is ensuring that the system requirements are met by the implementation. Questions: Does the finished system satisfy the requirements?
Deployment Phase Deployment is concerned with getting the software and hardware to the end users, along with documentation and training materials. Questions: What do system administrators have to do? How can we educate the end users?
Maintenance Phase Maintenance involves finding and fixing bugs after the system is live. Questions: Can we find and fix faults? Can we improve the system?
The Waterfall Methodology The waterfall methodology originated in manufacturing and construction industries. In the waterfall methodology, each phase is completed and verified before the next phase is started. This is oftentimes unrealistic because software systems do not behave like physical systems.
Where the Waterfall Methodology is Useful When repeating a specific kind of development with only minor differences. As a framework for learning different techniques used in software development. As a single pass through a spiral methodology. As a framework for an iterative methodology. For the quick development of small projects with small numbers of developlers.
Examples of Small Projects Software Prototype: an experiment built to try out functionality of the finsihed product. Production prototype: similar to a prototype, but some code is retained. Proof-of-concept: a project designed to demonstrate the feasibility of some technology. Rapid Application Development (RAD): assembly of small systems using object-oriented techniques.
Other Software Methodologies Spiral: perform the sequence of phases multiple times Iterative: revisit previous phases with information obtained from later phases Incremental: deliver versions with increasing functionality Combined: use elements of each of the previous methodologies
Object-Oriented Methodologies Object-oriented methodologies typically address: The philosophy behind each phase The workflows and individual activities within each phase The artifacts that should be produced Dependencies between the artifacts Notations for the different kinds of artifacts The need to model static structure and dynamic behavior
Reasons to Employ Development Tools Traceability Change History Multiuser access control Reduced redundancy Consistency checking Network operation Testing artifacts for correctness
The Unified Modeling Language (UML) The Unified Modeling Language (UML) is a standard way to visualize the design of a system. Example UML diagrams per phase: Requirements Activity diagrams Communication diagrams Use case diagrams Analysis Class diagrams Communication diagrams Design Deployment diagrams Class diagrams Sequence diagrams