Top Banner
Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation
29

Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Dec 30, 2015

Download

Documents

Diana Anthony
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Object Orientation

“Thinking” Object Oriented, Further Constraints, and

Documentation

Page 2: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

An Aside

• To some of you, I imagine that some of C++’s syntax and structure may be pretty foreign, to say the least.– In particular, some people have never

worked (heavily) with OO before.– This is because there’s a whole different

way of thinking about programming tasks in OO.

Page 3: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Programming Paradigms

• In the world, there are over 6900 different spoken languages.

• Some of these languages are more similar to each other than others.– Consider Spanish, French, Italian…– Consider Hindi, Urdu… or perhaps

Mandarin Chinese.

Page 4: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Programming Paradigms

• Just as there are families of real-world spoken languages, there are multiple families – or paradigms – of programming languages.

Page 5: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Imperative

• Chances are, most of your programming experience is in the imperative paradigm.– Think C, for example.– Code is executed one line after another,

step by step.– The focus is on the order of code

execution.

Page 6: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Imperative

• Imperative-style programs make little attempt to enforce good data organization habits.– This must be handled by the

programmer.– Data is often in a global scope,

accessible anywhere, at any time, by anyone.• As are functions.

Page 7: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Object-Orientation

• Object-orientation is quite different.– As we’ve seen already, part of its design

is to enforce the organization of data into logical, conceptual units within the system.

– Each object keeps its data private (ideally) and seeks to enforce constraints to keep itself in a proper form.

Page 8: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Object-Orientation

• Object-orientation is quite different.–Work gets done by objects interacting

with other objects.• As such, the exact flow of execution in the

program may not be easy to track.

– Object orientation aims to avoid making anything truly global.• Java doesn’t even allow “truly” global

variables… though it’s easily possible to compensate for this. C++ allows them.

Page 9: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Coding in OO

• So far, we’ve seen a few examples of OO code, but I haven’t really broken down what’s going on behind the scenes to make everything work.

• Let’s look at an example and talk through it.

Page 10: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

class Fraction{

private:int numerator;int denominator;

public:Fraction add(Fraction &f);

}

Page 11: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

Page 12: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Coding in OO

• First, let’s examine this line of code.

f1.add(f2); //Both are Fractions

• What is this setting up and modeling?

• Secondly, what is going on in add()?

Page 13: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

f1.add(f2); //Both are Fractions

• This line is basically saying “Call the “Fraction.add()” method from the perspective of f1.

Coding in OO

Page 14: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

So, that line of code has an implied reference to what was previously called “f1.”

Page 15: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

This “implied reference” is known as this within C++. It’s understood to be implied on any

“unqualified” field names in the method below.

Page 16: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

The use of “numerator” and “denominator”, when not preceded by “f.” here, are with

respect to this.

Page 17: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

What about when we do have “f.” preceding numerator and denominator?

Page 18: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

A Fraction Object

public Fraction* Fraction::add(Fraction &f){

int num = numerator * f.denominator;num += f.numerator * denominator;int dnm = f.denominator * denominator;

return new Fraction(num, dnm);}

In such cases, the perspective shifts to that of the object f, from which it then operates for the

field or method after the “.”.

Page 19: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

f1.add(f2); //Both are Fractions

• Even though the add() method is operating with two different Fraction class instances, the code is able to keep track of which is this and which is the parameter f.

Coding in OO

Page 20: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

An Aside

• There also exist other programming paradigms.–We’ll visit some others later on, but I’d

rather keep things here for now and avoid confusion.

Page 21: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Questions?

Page 22: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

• For the rest of this lecture, we’ll switch gears to examining documentation and a bit more in regard to analysis.

Page 23: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• Documentation is the “plain” English text accompanying code that seeks to explain its structure and use.– Some of this documentation is typically

in comments, directly in the code.– Other documentation may be in external

documents.

Page 24: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• For complex code, it can be very helpful to place inline comments on a “paragraph” level, explaining what purpose that block of code is accomplishing.– A line-by-line commentary may clarify what the code is doing, but rarely indicates why.• Note the purpose of your code – its goal.

Page 25: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• We’ve already noted two different ways to comment within C++:

// This is a one-line comment.

/* This is a block comment, spanning multiple lines. */

Page 26: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• In producing documentation for a method, it is wise to place some form of the “relationships” criterion within the description.– Generally, the conceptual purpose which

a method, field, or class serves.

Page 27: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• One should also include an explanation of the method’s preconditions, if it has any.– Preconditions: the limitations a

particular method imposes on its inputs.– If a method is called with arguments

that do not match its preconditions, its behavior is considered to be undefined.

Page 28: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Documentation

• As there exists a notion of preconditions, there also exist postconditions.– Postconditions: the effect a method has

on its inputs (any unaffected/unlisted input should remain untouched), any generated exceptions, information about the return value, and effects on object state.

Page 29: Object Orientation “Thinking” Object Oriented, Further Constraints, and Documentation.

Benefits

• Documentation helps other programmers to understand the role of each accessible field and method for a given class.

• Inside of code, documentation provides great reference material for future maintenance efforts.