Modularity Keeps the complexity of a large program manageable by systematically controlling the interaction of its components Isolates errors Eliminates.

Slides:



Advertisements
Similar presentations
COMPSCI 105 S Principles of Computer Science 12 Abstract Data Type.
Advertisements

Exception Handling The purpose of exception handling is to permit the program to catch and handle errors rather than letting the error occur and suffer.
Designing an ADT The design of an ADT should evolve naturally during the problem-solving process Questions to ask when designing an ADT What data does.
CMPT 225 Abstract Data Types.
Abstract Data Types. Typical operations on data  Add data to a data collection  Remove data from a data collection  Ask questions about the data in.
Chapter 3 Data Abstraction: The Walls. © 2005 Pearson Addison-Wesley. All rights reserved3-2 Abstract Data Types Modularity –Keeps the complexity of a.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
© 2006 Pearson Addison-Wesley. All rights reserved4-1 Chapter 4 Data Abstraction: The Walls.
Chapter 3 Data Abstraction: The Walls. © 2005 Pearson Addison-Wesley. All rights reserved3-2 Abstract Data Types Typical operations on data –Add data.
Object Oriented Programming.  OOP Basic Principles  C++ Classes  September 2004  John Edgar 22.
© 2006 Pearson Addison-Wesley. All rights reserved4-1 Chapter 4 Data Abstraction: The Walls.
Chapter Objectives You should be able to describe: Object-Based Programming Classes Constructors Examples Common Programming Errors.
Lecture 9 Concepts of Programming Languages
© 2006 Pearson Addison-Wesley. All rights reserved 4-1 Chapter 4 Data Abstraction: The Walls.
Data Abstraction: The Walls
Chapter 4 Linked Lists. © 2005 Pearson Addison-Wesley. All rights reserved4-2 Preliminaries Options for implementing an ADT List –Array has a fixed size.
Data Abstraction and Problem Solving with C++ Walls and Mirrors, Third Edition, Frank M. Carrano and Janet J. Prichard ©2002 Addison Wesley CHAPTER 3 Data.
Chapter 8 More Object Concepts
2 Preliminaries Options for implementing an ADT List Array has a fixed size Data must be shifted during insertions and deletions Linked list is able to.
Copyright © 2012 Pearson Education, Inc. Chapter 13: Introduction to Classes.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 3: Data Abstraction: The Walls Data Abstraction & Problem.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 13: Introduction to Classes.
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 13 Introduction to Classes.
Introduction to Abstract Data Type & C++ Revision 1 Data Structure & Algorithm Part II 10/26/2015.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 3: Data Abstraction: The Walls Data Abstraction & Problem.
Copyright 2004 Scott/Jones Publishing Alternate Version of STARTING OUT WITH C++ 4 th Edition Chapter 7 Structured Data and Classes.
1 Object-Oriented Programming Using C++ CLASS 1. 2 Review of Syllabus Catalog Description –An introduction to object oriented programming techniques using.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Namespaces & Exceptions Adapted from Ch. 3 slides of Data Abstraction:
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 8: Class Relationships Data Abstraction & Problem Solving.
April 24, 2017 Chapter 4 Data Abstraction The Walls
Chapter 4 Data Abstraction: The Walls. © 2004 Pearson Addison-Wesley. All rights reserved4-2 Abstract Data Types Modularity –Keeps the complexity of a.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Comp 245 Data Structures (A)bstract (D)ata (T)ypes ADT.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Programming with Java © 2002 The McGraw-Hill Companies, Inc. All rights reserved. 1 McGraw-Hill/Irwin Chapter 5 Creating Classes.
OOP using C Abstract data types How to accomplish the task??? Requirements Details Input, output, process Specify each task in terms of input.
2 Objectives You should be able to describe: Object-Based Programming Classes Constructors Examples Common Programming Errors.
Advanced C++ Topics Chapter 8. CS 308 2Chapter 8 -- Advanced C++ Topics This chapter describes techniques that make collections of reusable software components.
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
CSci 162 Lecture 10 Martin van Bommel. Procedures vs Objects Procedural Programming –Centered on the procedures or actions that take place in a program.
C++ Class. © 2005 Pearson Addison-Wesley. All rights reserved 3-2 Abstract Data Types Figure 3.1 Isolated tasks: the implementation of task T does not.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
(1) ICS 313: Programming Language Theory Chapter 11: Abstract Data Types (Data Abstraction)
COP3530 Data Structures300 Data Abstraction: The Walls Abstract Data Types (ADT) Specifying ADTs –The ADT List –The ADT Sorted List –Designing an ADT Implementation.
1 Object-Oriented Programming Using C++ CLASS 6. 2 Specifying ADTs: The ADT List Except for the first and last items in a list, each item has a unique.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
72 4/11/98 CSE 143 Abstract Data Types [Sections , ]
© 2006 Pearson Addison-Wesley. All rights reserved 1-1 Chapter 1 Review of Java Fundamentals.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 13: Introduction to Classes.
1 Object-Oriented Programming Using C++ CLASS 4 Honors.
Chapter 5 Introduction to Defining Classes Fundamentals of Java.
Prof. I. J. Chung Data Structure #1 Professor I. J. Chung.
Data Abstraction: The Walls
Abstract Data Types (ADT)
Data Abstraction: The Walls
Chapter 3: Using Methods, Classes, and Objects
About the Presentations
Introduction to Classes
Data Abstraction A technique for increasing the modularity of a program The need to support several operations on the data arise need to define abstract.
Lecture 9 Concepts of Programming Languages
Introduction to Classes
Data Abstraction: The Walls
Abstract Data Types (ADT)
Data Abstraction: The Walls
Chapter 8: Class Relationships
Data Abstraction: The Walls
Lecture 9 Concepts of Programming Languages
Presentation transcript:

Modularity Keeps the complexity of a large program manageable by systematically controlling the interaction of its components Isolates errors Eliminates redundancies A modular program is Easier to write Easier to read Easier to modify 2

Abstraction Functional abstraction Separates the purpose and use of a module from its implementation A module’s specifications should Detail how the module behaves Be independent of the module’s implementation Information hiding Hides certain implementation details within a module Makes these details inaccessible from outside the module 3

4 ADT Figure 3-1 Isolated tasks: the implementation of task T does not affect task Q

5 ADT Cont’d The isolation of modules is not total –A function’s specification, or contract, governs how it interacts with other modules Figure 3-2 A slit in the wall

ADT Cont’d Typical operations on data Add data to a data collection Remove data from a data collection Ask questions about the data in a data collection Data abstraction Asks you to think what you can do to a collection of data independently of how you do it Allows you to develop each data structure in relative isolation from the rest of the solution A natural extension of functional abstraction 6

Definition of ADT Abstract data type (ADT) An ADT is composed of A collection of data A set of operations on that data Specifications of an ADT indicate What the ADT operations do, not how to implement them Implementation of an ADT Includes choosing a particular data structure 7

8 Applying ADT Figure 3-4 A wall of ADT operations isolates a data structure from the program that uses it

Specifying ADTs: The ADT List Except for the first and last items in a list, each item has a unique predecessor and a unique successor Head (or front) does not have a predecessor Tail (or end) does not have a successor 9

The ADT List Items are referenced by their position within the list Specifications of the ADT operations Define an operation contract for the ADT list Do not specify how to store the list or how to perform the operations ADT operations can be used in an application without the knowledge of how the operations will be implemented 10

The ADT List ADT List Operations Create an empty list Destroy a list Determine whether a list is empty Determine the number of items in a list Insert an item at a given position in the list Delete the item at a given position in the list Look at (retrieve ) the item at a given position in the list 11

The ADT List Operation Contract for the ADT List createList() destroyList() isEmpty():boolean {query} getLength():integer {query} insert(in index:integer, in newItem:ListItemType, out success:boolean) remove(in index:integer, out success:boolean) retrieve(in index:integer, out dataItem:ListItemType, out success:boolean) {query} 12

The ADT List Pseudocode to create the list milk, eggs, butter aList.createList() aList.insert(1, milk, success) aList.insert(2, eggs, success) aList.insert(3, butter, success) 13

The ADT List milk, eggs, butter Insert bread after milk aList.insert(2, bread, success) milk, bread, eggs, butter Insert juice at end of list aList.insert(5, juice, success) milk, bread, eggs, butter, juice 14

The ADT List milk, bread, eggs, butter, juice Remove eggs aList.remove(3, success) milk, bread, butter, juice Insert apples at beginning of list aList.insert(1, apples, success) apples, milk, bread, butter, juice 15

The ADT List apples, milk, bread, butter, juice Pseudocode function that displays a list displayList(in aList:List) for (position = 1 to aList.getLength()) { aList.retrieve(position, dataItem, success) Display dataItem } // end for 16

The ADT List 17 Figure 3-7 The wall between displayList and the implementation of the ADT list

The ADT Sorted List The ADT sorted list Maintains items in sorted order Inserts and deletes items by their values, not their positions 18

The ADT Sorted List Operation Contract for the ADT Sorted List sortedIsEmpty():boolean{query} sortedGetLength():integer{query} sortedInsert(in newItem:ListItemType, out success:boolean) sortedRemove(in index:integer, out success :boolean) sortedRetrieve(in index:integer, out dataItem:ListItemType, out success :boolean){query} locatePosition(in anItem:ListItemType, out isPresent:boolean):integer{query} 19

Designing an ADT The design of an ADT should evolve naturally during the problem-solving process Questions to ask when designing an ADT What data does a problem require? What operations does a problem require? For complex abstract data types, the behavior of the operations must be specified using axioms Axiom: A mathematical rule Example : (aList.createList()).size() = 0 20

Implementing ADTs Choosing the data structure to represent the ADT’s data is a part of implementation Choice of a data structure depends on Details of the ADT’s operations Context in which the operations will be used Implementation details should be hidden behind a wall of ADT operations A program (client) should only be able to access the data structure by using the ADT operations 21

Implementing ADTs 22 Figure 3-8 ADT operations provide access to a data structure

Implementing ADTs 23 Figure 3-9 Violating the wall of ADT operations

C++ Classes Encapsulation combines an ADT’s data with its operations to form an object An object is an instance of a class A class defines a new data type A class contains data members and methods (member functions) By default, all members in a class are private But you can specify them as public Encapsulation hides implementation details 24

C++ Classes 25 Figure 3-10 An object’s data and methods are encapsulated

C++ Classes Each class definition is placed in a header file Classname.h The implementation of a class’s methods are placed in an implementation file Classname.cpp 26

C++ Classes: The header file Sphere.h */ const double PI = ; class Sphere { public: Sphere(); // Default constructor Sphere(double initialRadius); // Constructor void setRadius(double newRadius); double getRadius() const; // can’t change data members double getDiameter() const; double getCircumference() const; double getArea() const; double getVolume() const; void displayStatistics() const; private: double theRadius; // data members should be private }; // end Sphere 27

C++ Classes: Constructors Constructors Create and initialize new instances of a class Invoked when you declare an instance of the class Have the same name as the class Have no return type, not even void A class can have several constructors A default constructor has no arguments The compiler will generate a default constructor if you do not define any constructors 28

C++ Classes: Constructors The implementation of a method qualifies its name with the scope resolution operator :: The implementation of a constructor Sets data members to initial values Can use an initializer Sphere::Sphere() : theRadius(1.0) { } // end default constructor Cannot use return to return a value 29

C++ Classes: Destructors Destructor Destroys an instance of an object when the object’s lifetime ends Each class has one destructor For many classes, you can omit the destructor The compiler will generate a destructor if you do not define one For now, we will use the compiler’s destructor 30

C++ Classes: The implementation file Sphere.cpp */ #include #include "Sphere.h" // header file using namespace std; Sphere::Sphere() : theRadius(1.0) { } // end default constructor Sphere::Sphere(double initialRadius) { if (initialRadius > 0) theRadius = initialRadius; else theRadius = 1.0; } // end constructor 31

C++ Classes: The implementation file void Sphere::setRadius(double newRadius) { if (newRadius > 0) theRadius = newRadius; else theRadius = 1.0; } // end setRadius The constructor could call setRadius 32

C++ Classes: The implementation file double Sphere::getRadius() const { return theRadius; } // end getRadius... double Sphere::getArea() const { return 4.0 * PI * theRadius * theRadius; } // end getArea... 33

C++ Classes: Using the class Sphere #include #include "Sphere.h" // header file using namespace std; int main() // the client { Sphere unitSphere; Sphere mySphere(5.1); cout << mySphere.getDiameter() << endl;... } // end main 34

Inheritance in C++ A derived class or subclass inherits any of the publicly defined methods or data members of a base class or superclass #include “Sphere.h” enum Color {RED, BLUE, GREEN, YELLOW}; class ColoredSphere: public Sphere { public: … Color getColor() const; … private: Color c; } // end ColoredSphere 35

Inheritance in C++ An instance of a derived class is considered to also be an instance of the base class Can be used anywhere an instance of the base class can be used An instance of a derived class can invoke public methods of the base class 36

C++ Namespaces A mechanism for logically grouping declarations and definitions into a common declarative region namespace myNamespace { // Declarations... } //end myNamespace 37

C++ Namespaces The contents of the namespace can be accessed by code inside or outside the namespace Use the scope resolution operator ( :: ) to access elements from outside the namespace Alternatively, the using declaration allows the names of the elements to be used directly 38

C++ Namespaces Creating a namespace namespace smallNamespace { int count = 0; void abc(); } // end smallNamespace Using a namespace using namespace smallNamespace; count +=1; abc(); 39

C++ Namespaces Items declared in the C++ Standard Library are declared in the std namespace You include files for several functions declared in the std namespace To include input and output functions from the C++ library, write #include using namespace std; 40

An Array-Based ADT List Both an array and a list identify their items by number Using an array to represent a list is a natural choice Store a list’s items in an array items Distinguish between the list’s length and the array’s size Keep track of the list’s length 41

An Array-Based ADT List Header file ListA.h */ const int MAX_LIST = maximum-size-of-list ; typedef desired-type-of-list-item ListItemType; class List { public:... private: ListItemType items[MAX_LIST]; int size; } // end List 42

An Array-Based ADT List A list’s k th item is stored in items[k-1] 43 Figure 3-11 An array-based implementation of the ADT list

An Array-Based ADT List To insert an item, make room in the array 44 Figure 3-12 Shifting items for insertion at position 3

An Array-Based ADT List To delete an item, remove gap in array 45 Figure 3-13 (a) Deletion causes a gap; (b) fill gap by shifting

C++ Exceptions Exception A mechanism for handling an error during execution A function can indicate that an error has occurred by throwing an exception The code that deals with the exception is said to handle it Uses a try block and catch blocks 46

C++ Exceptions try block Place a statement that might throw an exception within a try block try { statement(s) ; } 47

C++ Exceptions catch block Deals with an exception catch ( ExceptionClass identifier ) { statement(s) ; } Write a catch block for each type of exception handled 48

C++ Exceptions When a statement in a try block causes an exception Rest of try block is ignored Destructors of objects local to the block are called Control passes to catch block corresponding to the exception After a catch block executes, control passes to statement after last catch block associated with the try block 49

C++ Exceptions Throwing exceptions A throw statement throws an exception throw ExceptionClass ( stringArgument ); Methods that throw an exception have a throw clause void myMethod(int x) throw(MyException) { if (...) throw MyException(“MyException: …”);... } // end myMethod You can use an exception class in the C++ Standard Library or define your own 50

An ADT List Implementation Using Exceptions We define two exception classes #include using namespace std; class ListIndexOutOfRangeException : public out_of_range { public: ListIndexOutOfRangeException(const string & message = “”) : out_of_range(message.c_str()) {} }; // end ListException 51

An ADT List Implementation Using Exceptions #include using namespace std; class ListException : public logic_error { public: ListException(const string & message = “”) : logic_error(message.c_str()) {} }; // end ListException 52

An ADT List Implementation Using Exceptions ListAexcept.h */ #include “ListException.h” #include “ ListIndexOutOfRangeException.h”... class List { public:... void insert(int index, const ListItemType& newItem) throw(ListIndexOutOfRangeException, ListException);... } // end List 53

An ADT List Implementation Using Exceptions ListAexcept.cpp */ void List::insert(int index, const ListItemType& newItem) throw(ListIndexOutOfRangeException, ListException); { if (size > MAX_LIST) throw ListException(“ListException: ” + “List full on insert”);... } // end insert 54 Ex3-2 (ListE.h, ListA.h, ListA.cpp, List.cpp)

Summary Data abstraction controls the interaction between a program and its data structures Abstract data type (ADT): a set of data- management operations together with the data values upon which they operate Axioms specify the behavior of ADT operations in a formal mathematical study of an ADT Define an ADT fully before making any decisions about an implementation 55

Summary Hide an ADT’s implementation by defining the ADT as a C++ class An object encapsulates both data and operations A class contains one destructor and at least one constructor The compiler generates A default constructor if no constructor is provided A destructor if none is provided 56

Summary Members of a class are private by default Data members are typically private Public methods can be provided to access them Define and implement a class within header and implementation files Namespace: a mechanism to group classes, functions, variables, types, and constants You can throw an exception if you detect an error during program execution. You handle, or deal with, an exception by using try and catch blocks 57