Programming Language Principles Lecture 30 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Object-Oriented Programming.

Презентация:



Advertisements
Похожие презентации
Unit II Constructor Cont… Destructor Default constructor.
Advertisements

1/30 Chapter 8: Dynamic Binding And Abstract classes.
1/27 Chapter 9: Template Functions And Template Classes.
Loader Design Options Linkage Editors Dynamic Linking Bootstrap Loaders.
Operator Overloading Customised behaviour of operators Chapter: 08 Lecture: 26 & 27 Date:
A class is just a collection of variables--often of different types--combined with a set of related functions. The variables in the class are referred.
2005 Pearson Education, Inc. All rights reserved. 1 Object-Oriented Programming: Interface.
Data Types in C. A Data Type A data type is –A set of values AND –A set of operations on those values A data type is used to –Identify the type of a variable.
1 © Luxoft Training 2012 Inner and anonymous classes.
Inner Classes. 2 Simple Uses of Inner Classes Inner classes are classes defined within other classes The class that includes the inner class is called.
Lecture # Computer Architecture Computer Architecture = ISA + MO ISA stands for instruction set architecture is a logical view of computer system.
11 BASIC DRESS-UP FEATURES. LESSON II : DRESS UP FEATURES 12.
HPC Pipelining Parallelism is achieved by starting to execute one instruction before the previous one is finished. The simplest kind overlaps the execution.
© Luxoft Training 2013 Annotations. © Luxoft Training 2013 Java reflection / RTTI // given the name of a class, get a "Class" object that // has all info.
Arrays Dr. Ramzi Saifan Slides adapted from Prof. Steven Roehrig.
Object Oriented Programming Ashraf Zia Lecturer Abdul Wali Khan University, Mardan. Lecture - 2.
© 2006 Cisco Systems, Inc. All rights reserved. BSCI v Implementing BGP Explaining BGP Concepts and Terminology.
Data Variable and Pointer Variable Pass by Reference Pointer Arithmetic Passing Array Using Pointers Dynamic Allocation.
SPLAY TREE The basic idea of the splay tree is that every time a node is accessed, it is pushed to the root by a series of tree rotations. This series.
1 When And How To Make Interfaces Work For You Advanced OO Techniques Alex Herbstritt Principal Software Engineer, Progress Software Session 102.
Транксрипт:

Programming Language Principles Lecture 30 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Object-Oriented Programming

Object Oriented Programming Over time, data abstraction has become essential as programs became complicated. Benefits: 1. Reduce conceptual load (minimum detail). 2. Fault containment. 3. Independent program components. (difficult in practice). Code reuse possible by extending and refining abstractions.

Object Oriented Programming A methodology of programming Four (Five ?) major principles: 1.Data Abstraction. 2.Encapsulation. 3.Information Hiding. 4.Polymorphism (dynamic binding). 5.Inheritance. (particular case of polymorphism ?) Will describe these using C++, because...

The C++ language An object-oriented, general-purpose programming language, derived from C (C++ = C plus classes). C++ adds the following to C: 1.Inlining and overloading of functions. 2.Default argument values. 3.Argument pass-by-reference. 4.Free store operators new and delete, instead of malloc() and free(). 5.Support for object-oriented programming, through classes, information hiding, public interfaces, operator overloading, inheritance, and templates.

Design Objectives in C++ Compatibility. Existing code in C can be used. Even existing, pre-compiled libraries can be linked with new C++ code. Efficiency. No additional cost for using C++. Overheadof function calls is eliminated where possible. Strict type checking. Aids debugging, allows generation of efficient code. C++ designed by Bjarne Stroustrup of Bell Labs (now at TAMU). Standardization: ANSI, ISO.

Non Object-Oriented Extensions to C Major improvements over C. 1.Stream I/O. 2.Strong typing. 3.Parameter passing by reference. 4.Default argument values. 5.Inlining. Weve discussed some of these already.

Stream I/O in C++ Input and output in C++ is handled by streams. The directive #include declares 2 streams: cin and cout. cin is associated with standard input. Extraction: operator>>. cout is associated with standard output. Insertion: operator<<. In C++, input is line buffered, i.e. the user must press before any characters are processed.

Example of Stream I/O in C++ A function that returns the sum of the numbers in the file Number.in int fileSum(); { ifstream infile("Number.in"); int sum = 0; int value; //read until non-integer or while(infile >> value) sum = sum + value; return sum; }

Example of Stream I/O in C++ Example 2: A function to copy myfile into copy.myfile void copyfile() { ifstream source("myfile"); ofstream destin("copy.myfile"); char ch; while (source.get(ch)) destin<<ch; }

Line-by-line textfile concatenation int ch; // Name1, Name2, Name3 are strings ifstream f1 (Name1); ifstream f2 (Name2); ofstream f3 (Name3); while ((ch = f1.get())!=-1 ) if (ch =='\n') while ((ch = f2.get())!=-1) { f3.put(ch); if (ch == '\n') break; } else f3.put(ch); }

Why use I/O streams ? Streams are type safe -- the type of object being I/O'd is known statically by the compiler rather than via dynamically tested '%' fields. Streams are less error prone: – Difficult to make robust code using printf. Streams are faster: printf interprets the language of '%' specs, and chooses (at runtime) the proper low-level routine. C++ picks these routines statically based on the actual types of the arguments.

Why use I/O streams ? (contd) Streams are extensible -- the C++ I/O mechanism is extensible to new user-defined data types. Streams are subclassable -- ostream and istream (C++ replacements for FILE*) are real classes, and hence subclassable. Can define types that look and act like streams, yet operate on other objects. Examples: –A stream that writes to a memory area. –A stream that listens to external port.

C++ Strong Typing There are 6 principal situations in which C++ has stronger typing than C. 1.The empty list of formal parameters means "no arguments" in C++. In C, it means "zero or more arguments", with no type checking at all. Example: char * malloc();

C++ Strong Typing (contd) 2.In C, it's OK to use an undefined function; no type checking will be performed. In C++, undefined functions are not allowed. Example: main() f( ); // C++: error, f not defined // C: OK, taken to mean int f()

C++ Strong Typing (contd) 3.A C function, declared to be value- returning, can fail to return a value. Not in C++. Example: double foo() { /*... */ return; } main() { if ( foo() ) {... }... } // C : OK // C++: error, no return value.

C++ Strong Typing (contd) 4.In C, assigning a pointer of type void* to a pointer of another type is OK. Not in C++. Example: int i = 1024; void *pv = &i; // C++: error, // explicit cast required. // C : OK. char *pc = pv; int len = strlen(pc);

C++ Strong Typing (contd) 5.C++ is more careful about initializing arrays: Example: char A[2]="hi"; // C++: error, // not enough space for '\0' // C : OK, but no '\0' is stored. It's best to stick with char A[] = "hi;

C++ Strong Typing (contd) 6.Free store (heap) management. In C++, we use new and delete, instead of malloc and free. malloc() doesn't call constructors, and free doesn't call destructors. new and delete are type safe.

Object-Oriented Programming Object-oriented programming is a programming methodology characterized by the following concepts: 1.Data Abstraction: problem solving via the formulation of abstract data types (ADT's). 2.Encapsulation: the proximity of data definitions and operation definitions. 3.Information hiding: the ability to selectively hide implementation details of a given ADT. 4.Polymorphism: the ability to manipulate different kinds of objects, with only one operation. 5.Inheritance: the ability of objects of one data type, to inherit operations and data from another data type. Embodies the "is a" notion: a horse is a mammal, a mammal is a vertebrate, a vertebrate is a lifeform.

O-O Principles and C++ Constructs O-O ConceptC++ Construct(s) AbstractionClasses EncapsulationClasses Information HidingPublic and Private Members PolymorphismOperator overloading, templates, virtual functions InheritanceDerived Classes

O-O is a different Paradigm Central questions when programming. –Imperative Paradigm: –What to do next ? –Object-Oriented Programming –What does the object do ? (vs. how) Central activity of programming: –Imperative Paradigm: –Get the computer to do something. –Object-Oriented Programming –Get the object to do something.

C vs. C++, side-by-side

C vs. C++, side-by-side (contd) In C++, methods can appear inside the class definition (better encapsulation)

C vs. C++, side-by-side (contd) In C++, no explicit referencing. Could have overloaded > for Stacks: s > i;

Structures and Classes in C++ Structures in C++ differ from those in C in that members can be functions. A special member function is the constructor, whose name is the same as the structure. It is used to initialize the object: struct buffer { buffer() {size=MAXBUF+1; front=rear=0;} char buf[MAXBUF+1]; int size, front, rear; }

Structures and Classes in C++ The idea is to add some operations on objects of type buffer : struct buffer { buffer() {size=MAXBUF+1;front=rear=0;} char buf[MAXBUF+1]; int size, front, rear; int succ(int i) {return (i+1)%size;} int enter(char); char leave(); }

Structures and Classes in C++ The definition (body) of a member function can be included in the structure's declaration, or may appear later. If so, use the name resolution operator (::) int buffer::enter(char x) { // body of enter } char buffer::leave() { // body of leave }

Public and Private Members Structures and classes are closely related in C++: struct x { }; is equivalent to class x { public: }; Difference: by default, members of a structure are public; members of a class are private. So, class x { }; is the same as struct x { private: };

Header File Partitioning

Header File Partitioning (contd)

Programming Language Principles Lecture 30 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Object-Oriented Programming