From: "On Understanding Data Abstraction, Revisited. William R. Cook"
"in modern object-oriented languages, the issue boils down to whether or not classes are used as types. In a pure object-oriented style, classes are only used to construct objects, and interfaces are used for types. When classes are used as types, the programmer is implicitly choosing to use a form of abstract data type."
"To summarize, when a class name is used as a type, it represents an abstract data type"
"Object-Oriented Programming in Java
While Java is not a pure object-oriented language, it is possible to program in a pure object-oriented style by obeying the following rules
Classes only as constructors: A class name may only be used after the keyword new.
No primitive equality: The program must not use primitive equality (==). Primitive equality exposes representation and prevents simulation of one object by another. "
"Objects work with interfaces as types"
"OOP is using dynamic dispatch, ADT does not"
"ADT work with class as types"
Example ADT:
C++
class Person {}
Person p = new Person();
C
struct set rep; // representation is not defined in header
typedef struct set rep* set;
set empty();
bool isEmpty(set s);
set insert(set s, int i);
bool contains(set s, int i);
set union(set s1, set s2);
Example Objects:
class PersonManager {};
class PersonSystem {
void printName(Person p) {}
PersonManager m_manager;
};
Person p = new Person();
PersonSystem.printName(p);
No comments:
Post a Comment