430 likes | 625 Views
Programming Techniques Course. מוקדש לזכרו של פרופ' לב ברוטמן (1939-2001) חוקר בעל שם עולמי, ממייסדי החוג למדעי המחשב באוניברסיטת חיפה, איש מדע, מורה ומחנך, גידל דורות לאהבת המתמטיקה והמדע, תוך קידוש ערכי המצויינות, המופת, הכבוד ההדדי, הסובלנות ואהבת האדם. Version 1.0.
E N D
Programming Techniques Course • מוקדש לזכרו של פרופ' לב ברוטמן (1939-2001) חוקר בעל שם עולמי, ממייסדי החוג למדעי המחשב באוניברסיטת חיפה, איש מדע, מורה ומחנך, גידל דורות לאהבת המתמטיקה והמדע, תוך קידוש ערכי המצויינות, המופת, הכבוד ההדדי, הסובלנות ואהבת האדם
Version 1.0 Chapter 1 –Software Engineering
Table of contents • About the lecturer • Course objectives • Some administrative stuff • SW Engineering • Well known models • Object Orientation • The development process • Tools • The industry – current situation • Exercise
Course Objectives • About the lecturer • Why am I here? • Why are you here? • Course objectives • Object Orientation – how it evolved • Modeling – Analysis, Design, Implementation • Tools and the industry • C++ as an OO Programming Language • Through all its capabilities and features • Learn and use • Understand Object Orientation, and what characterizes it • Understand why it is good, and why so much money is invested in it
Administration • Lecture days and hours • Practices • Assistance • Labs • Homeworks • Grades • Exam • We are here for your success!!
Credits & Bibliography • Dr. Shimon Cohen – תכנות מונחה עצמים - הכרה אינטואיטיבית של המודל- מהדורה 1.1 אפריל 1999 • Rational Software • UML and the Unified Process – Ivar Jacobson, from Rational Worldwide Software Symposium – speaker support notes • Bibliography • C++ Primer - Stanley B. Lippman, Josée LaJoie • Inside the C++ Object Model - Stanley B. Lippman • Visual C++\MFC - מדריך מקצועי - Meir Sela • “Effective C++”– Scott Meyers • “More Effective C++”– Scott Meyers • “Effective STL”– Scott Meyers • WEB
SW Engineering • What is it all about? • Is it engineering at all? • Who cares about it? • Managers • Quality assurance personnel • Customer • Why do it? • Save money • Quality product, standards
The Development Process • What is a development process? • Why a development process? • The development process • Requirements gathering • System analysis • System design • Implementation • Unit testing • Integration • System testing • Delivery • Maintenance
Development Process - Waterfall • Waterfall
Development Process – Spiral Iterative • Iterative, spiral
Structured Programming Structured Programming Procedures Data
Structured Programming • Traditional structured paradigm: • Identify the algorithm (functions) required to solve the problem: • Functional decomposition • Control flow • Identify the data structures needed by the functions. • Make them work together • Implement functions using/modifying the data
OO Programming Object Oriented Programming Methods Data Objects
Object Oriented Programming • Object-Oriented paradigm: • Identify the abstract objects (data) that represent the problem domain. • Identify the abstract operations supported by the objects, i.e., define the interface to the objects. • The problem solution is a sequence of calls to objects. • Objects exchange messages with one another
Lets Examine An Example • Phone Book • Requirements • Entry for each person / business • Name, phone number, address • Operations • Add/remove/modify name/phone number/address • Well designed programs are more reusable and maintainable. • The more you invest in infrastructure the less problems you will have with later changes • Invest a lot in thinking, for gathering generic requirements
What Is a Development Process? • For each iteration define who is doing what, when and to produce which result New or changed system New or changed requirements Software Engineering Process
Creating the Unified Process Rational Unified Process 5.0 Functional testing Performance testing Requirements mgmt Conf. and change mgmt Business engineering Data engineering UI design 1998 Rational Objectory Process 4.1 1996-1997 The Rational Approach UML Objectory Process 1.0-3.8 1987-1995 The Ericsson Approach
Overview of the Unified Process • The Unified Process is • Iterative and incremental • Use case driven • Architecture-centric • Why RUP – Rational Unified Process • There are other methodologies … • RUP was designed by the Trio: • Ivar Jacobson, Grady Booch, James Rumbaugh • RUP is fully integrated with UML and “Rational Rose”
RUP • Buzzwords • RUP – Rational Unified Process • UML – Unified Modeling Language • Tools • Rational Rose / Rhapsody / XDE – CASE tool • Visio – Drawing++ tool • RUP: Rational Unified Process • Process’s Workflows • Requirements • Analysis • Design • Implementation • Testing
time Lifecycle Phases • Inception Define the scope of the project and develop business case התחלה עיבוד מפורט בניה/יצירה העברה Inception Elaboration Construction Transition • Elaboration Plan project, specify features, and baseline the architecture • Construction Build the product • Transition Transition the product to its users
time Vision Baseline Architecture Initial Capability Product Release Major Milestones Inception Elaboration Construction Transition
The Birth Of OO • Projects size got larger • Complexity increased • More difficult for maintainability and evolution => More expensive • Looking for techniques for reducing complexity, increasing code reuse, more intuitive, unified technique for all development process activities, etc.
Object Oriented Objectives • To enable coping with complex and scaleable projects, Object Oriented provides tools for: • Project design and modeling: • Enables understanding a project’s structure, the components it is built from, their relationships and roles. • Reflecting the real world in a better way. • Unified technique through all project stages • Fast “ramp up” into project • Reducing dependencies between components: • An internal component change should not effectthe entire project. • Parallel development, independent
Object Oriented Objectives – cont’d • Code reusability: • Saves development time – each task is developed only once and is used by all required components. • Enables reasonable maintainability – any change, addition or bug fix in this task will be performed once, affecting all components using this code. • Creation of flexible and scaleable projects: • Enabling coping with future changes and additions.
A Bit of History • Time: 1962 • Place: Norwegian Computing Center, Oslo • Project on simulation of ship movement in fjords • Many kinds of ships, each with its own characteristics… • Difficult to distribute the work within team • Team member responsible for • Kind of boats? • Must add code to every function • Particular operation? • Must be expert in all boat kinds
A bit of history (cont.) • Difficult to share code between boat types • Difficult to add new boat types and operations • Difficult to maintain • Solution: group the ships into classes • Each class of ships type has its own data and behavior • Simula 67 language
Object Oriented • A System: • Is a collection of objects interacting with each other through message passing • Relating to each other via some relationship • Is-part-of relationship • Is-a relationship • Referring-to relationship • Achieved by • Containment • Aggregation • Association • Inheritance • For instance: • A book contains many pages • …
Object Object Method Msg Method Method Method Method Method Method Method Msg Object Object Method Msg Method Msg Method Method Method Method Method Method Msg Object Method Object Method Method Method Method Method Method Method Message Passing • Synchronous • A-Synchronous Msg
Objects • An object: • Is a self contained entity • With its own characteristics • Reflected via: • Attributes • Operations • Inter-relationships • More… • An operation is invoked as a result of message passing • The operation is intended to take care of the sent message
An Object Object Msg Msg Msg Msg Method Msg Msg Method Msg Msg Method Method Msg Msg
Draw(...) Count () M1() M2() An Object Looks like: Object Int X Float Y
Draw(...) Count() M1() M2() Relationships • “Part of” relation • “Reference to” relation Object Obj A Method Int X Method Float Y Obj B Pointer Method Method Object
World Entities • An entity has • Characteristics • Operations • Responsibilities • Behavior • Relationships to other entities • Invariant state • May have an internal life cycle • So we pack all this into one “package”, and we call it a class • It is more intuitive, since we as human beings have similar view of the world • Classification, characterization, relationship description, etc.
What did we achieve? • Described the problem in terms natural to the problem • Pre-OO, we talked in terms of ints and floats, like the computer • Now we can talk in terms of boats and maneuvres • Partitioned the problem into encapsulated sub-problems with well-defined interfaces • Adding new boat types is easy • And so is changing boat behavior
Classes – cont’d The class Objects - Instances of the class Go Length Go Go 35 65 Coordinates Stop 123, 456 Stop 222,333 Stop The Ship class Different Ships objects
Object Object Object Object Object Method Object Method Method Object Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Classes – cont’d Class
Inheritance Inheritance Tree (definition)
Boat PaddleBoat SailBoat MotorBoat AircraftCarrier Inheritance Tree Example: Employee
Inheritance - Main Concepts • When a class inherits from a base class, it contains all functionality and characteristics of its base • A derived class can expand its specifications by: • Adding new data • Adding new functionality • Overriding the inherited functionality
Location … … Engine … … Employee Inheritance - Tree Revisited Boat getLocation() move(Env) turn(Dir) SailBoat float sailArea move(Env) turn(Dir) MotorBoat float engineVolume move(Env) turn(Dir) start(Eng)
ObjectsWhat Are They Good For ? • Understand the problem • a natural way of looking at things (problems) • Software Engineering • Encapsulation helps to achieve the goals of • Parallel Development • Each object is defined independently Why is it better to view the system as a collection of objects ?
Objects - Encapsulation • Hiding implementation • What is it good for? • Can you give an example? • De-coupling / Decomposition • For reuse • For easier modifications, implementation free • Example: • Replace float sailArea with float sailAreas[]