Sunday 20 September 2020

Computer Science Reference List

CS Reference List

This is a collection of papers, websites and books that I have found useful when researching into computer science. Mainly into programming paradigms and languages, focusing on understanding OOP

OOP



Phenomena and Concepts

Website

http://people.cs.aau.dk/~normark/oop-csharp/html/notes/intro-oop_themes-phen-concepts-sect.html

About

Learning how objects relate to philosophical concepts and phenomena, provides a starting point to model objects.

Archived

  • Wayback machine (20/09/2020)

Specialization of classes

Website

http://people.cs.aau.dk/~normark/oop-csharp/html/notes/inheritance_themes-specialization-sect.html#inheritance_specialization-sect_section-title_1

About

A description of inhertiance using sets.

Archived

  • Wayback machine (20/09/2020)

A Tour of C++

Blog post

https://www.informit.com/articles/article.aspx?p=25003

Archived

  • Wayback machine (all pages available 20/09/2020)

Programming with abstract data types

PDF

https://dl.acm.org/doi/10.1145/942572.807045

About

Barbara Liskov defines the concept of an ADT which underpins OOP classes.

Archived

  • Present on the ACM website (27/12/2020)

A universal modular ACTOR formalism for artificial intelligence

PDF

https://dl.acm.org/doi/10.5555/1624775.1624804

About

A paper that describes how OOP classes can become functional entities.

Archived

  • Present on the ACM website (27/12/2020)

ALGOL bulletin No. 21 - AB21.3.6 "Record Handling"

About

An old ALGOL bulletin paper that defines records and their relation to types.


Record handling

URL

https://www.computerhistory.org/collections/catalog/102724664

About

C.A.R Hoare defines classes and subclasses.


On Understanding Data Abstraction

About

This paper describes what the difference between an Object (OOP) and ADT (abstract data type) is.


SIMULA INFORMATION - Common Base Language





Modules



Criteria for modularity

About

A white paper describing how to modularize a program.

Archived

  • Google drive (20/09/2020)

 


C++



CUED - C++ Namespaces

URL

CUED C++ Namespaces

About

Relating namespaces to Contexts (DDD).

Archived

  • Wayback machine (27/12/2020)

 

 


Software Engineering


Structured Design W.Stevens, G.Myers, and L.Constantine

About

A explanation of Structed Design in a seminal paper.


Structured Analysis for Requirements Definition D.T.Ross and K.E. Schoman, JR

About

A brief explanation of Requirements Definition and a brief system design cycle.


The delta system description language motivation, main concepts and experience from use - Petter Handlykken and Kristen Nygaard 1981

About

Interesting paper on concepts and language to define systems.

 

Sunday 6 September 2020

OOP Quotes 1: ADT vs Object

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);



The difference between class and object.

 The difference between class and object is subtle and misunderstood frequently. It is important to understand the difference in order to wr...