The document discusses converting real-world entities into programming objects and understanding their applications in API designing and MVC frameworks. It describes representing real things as objects in code, organizing classes in a standard way, defining class attributes like fields and methods, and relating classes through inheritance and relations. It also explains concepts like abstraction, interfaces, packages, and the roles of models, views and controllers in MVC architectures. The document advocates separating programs into these components to organize code and handle tasks like displaying data and user interaction separately.
Automating Google Workspace (GWS) & more with Apps Script
Solid OOPS
1. SOLID OOPS
ConvertingReal world entities into programming Objects ;
understanding its applications ; API designing, MVC framework
Anirudh Tomer
Harshith Keni
Toshish Jawale
2. We apologize for wrong session title
Lets know each other
Your expectations
Our aim
Why should you join this session
Goodies for active participants
Introduction
3. What is “Real”?
Everything outside of your program is
Real.
Even your own program is a Real World
Entity for some other program or even for
your own program!
In short
Real World Entity…
4. Because these are all the “things” on
which we want to work upon.
Yes, and by work we do not mean, just
writing the code!
Why do we bother about this?
5. Objects? Why?
How are they introduced in the
programming world?
Where are they used often?
State and behaviour
Who should use it?
Correlating to programming
objects
6. We separate our real world entities in
different groups
Object is an instance of a class
Ball
instances of
What is this class?
7. How classes are organized?
Why classes need to be organized?
Is there any standard way to do it?
If yes, whats it?
Organization
8. How these different attributes of a class
are defined?
fields/properties - state
methods/functions - behavior
constructors/initializers
destructors
What class contains?
9. What is the object oriented way of getting
rich ?
— Inheritance
Relations between the classes
By the way, are you good at relations?
Relations
11. Something you use to keep your stuff from
mixing together
Folders
Drives
A customized, more sophisticated package
Examples familiar to you are,
◦ ZIP file
◦ EXE file
◦ DLL file etc.
Point is, keep your stuff organized.
Package
12. What is Abstraction?
• Abstraction - a concept or idea not associated with
any specific instance
• It is all about perspective
• Everything
• Something
• Exactly the thing
13. Where does abstraction exist?
• Control abstraction
o Abstraction of actions
• Data abstraction
o Abstraction of information
14. How does this relate to
programming?
• Writing functions/subroutines is control
abstraction.
• Datatypes is data abstraction.
16. Example
public class Animal extends
LivingThing{ theChicken = new Animal();
private Location loc; theCat = new Animal();if
private double energyReserves;
(theChicken.isHungry())
public boolean isHungry() { {
return energyReserves <
2.5; theChicken.eat(grains);}
} if (theCat.isHungry()) {
public void eat(Food f) { theCat.eat(mouse);}
// Consume food theCat.moveTo(theSofa);
energyReserves +=
f.getCalories();
}
public void moveTo(Location l)
{
// Move to new location
loc = l;
}}
17. It's relevance with OOP
• Object is an attempt to combine data and control
abstraction
• Polymorphism
• Inheritence
18. Why do this?
• Separate the business logic from the underlying
complexity
• Make it easier to parallelize tasks
• Meaningful amount of details are exposed
• Representation in a similar form in semantics
(meaning) while hiding implementation details.
28. What it actually is
printf(), scanf(), strcmp()
Easy to use and hard to misuse Spec of DS,
functions,
Can be programming language unspecific!! behavior
etc.
Not necessarily a code library, can be just a spec
You can create your own API too
30. Designing Process (based on suggestions by Joshua Bloch)
Write 2 programs and not one
Write API first
◦ Understand the use case
◦ Foresee future extensions (don’t change API often)
◦ A general purpose API vs multiple small API’s
◦ If you can’t name it, its doing either extra or doing less
◦ Don’t surprise the API user, don’t do extra
◦ Remember! You can always add but you can’t remove
◦ Document the API religiously!
◦ Use consistent parameter ordering.
◦ Extra params, use a struct
Code more! API is living thing
Expect to make mistakes. Refactor API!
Encourage others to use it
32. Programming without MVC
I need it
Linked List with GUI
o add a node
o remove a node
o reverse a linked list
Linked list with GUI
______ ______ ______
|__1__| |__5__| |__7__| …
33. Challenges
Data Functions GUI
Structures • Function • Creating
• struct ? signature boxes
• Separate • Flow control • Moving
variables boxes
34. Nightmare begins
typedef struct node{
struct node* nextNode;
…
}Node;
…
Node *linkedlist;
addNewNode(){
while (linkedlist->nextNode!=null){
drawSquare(); //you may have internal D.S. for each square
drawArrow();
}
Node *newNode = (Node*) malloc(sizeof(struct node));
scanf(); // for new values
newNode->val1 = …;
newNode->val2 = …;
linkedlist->nextNode = newNode;
while (linkedlist->nextNode!=null){
drawSquare();
drawArrow();
}
}
35. New requirements
Keep different colors for each node
I want oval nodes not rectangular nodes
I want linked list nodes to be shown in
hierarchy not in straight line.
Make Changes
38. Model View Controller
• Handling data • Display data • Read data
• Save them on from view
file or in • Control user
internal D.S interaction
• Send new
data to model
Roles: Model, View and Controller
39. M-V-C not MVC
Keep them separate
You may create different files
◦ A separate “model.h”
◦ A separate “view.c” (includes model.h)
◦ A separate “controller.c” (includes model.h)
◦ Give deep thought to data structures
Principle of Agnosticism:
each component is unaware of others presence
40. Model
typedef struct node{ C++ or other
struct node* nextNode;
int id; OOP languages
… make finding the
}Node;
int globalId = 0;
context easy
typedef struct linkedList{
Node * headNode;
int id;
int listLength;
}LinkedList;
LinkedList *linkedListPool[];
void addNode(int linkedListId, int index, Node *newNode){
…
}
void removeNode(int linkedListId, Node *node){
…
}
LinkedList* createNewLinkedList(){
LinkedList* newll = (LinkedList*) malloc(sizeof(struct linkedList));
newll->id = globalId++;
newll->headNode = (Node*) malloc(sizeof(struct node));
newll->length = 0;
linkedListPool[globalId] = newll;
return newll;
}
41. View
typedef struct viewNode{
struct viewNode* nextViewNode;
int xLocation, int yLocation;
String color; //#FF3e2A (in hex)
…
}ViewNode;
//Similar to Model create another struct
typedef struct display{
ViewNode* head;
int id;
int length;
}Display;
Display *displayNodeList[];
void addDisplayNode(int viewNodeId, int index, Node *newNode){
//create new ViewNode
//Render UI
…
}
//create new display node like Model
42. Controller
typedef enum input{
ADD,REMOVE,GET_LENGTH…
}Input;
LinkedList* linkedList = createNewLinkedList();
Display* display = createNewDisplay();
//Show a fancy menu
Input input = read input from user;
switch(input){
case ADD:
Node* newNode = //malloc new node;
addNode(linkedList->id,newNode);
addDisplayNode(display->id,newNode);
break;
}