SOLID OOPSConvertingReal world entities into programming Objects ;  understanding its applications ; API designing, MVC fr...
   We apologize for wrong session title    Lets know each other   Your expectations   Our aim   Why should you join ...
 What is “Real”? Everything outside of your program is  Real. Even your own program is a Real World  Entity for some ot...
 Because these are all the “things” on  which we want to work upon. Yes, and by work we do not mean, just  writing the c...
   Objects? Why?   How are they introduced in the    programming world?   Where are they used often?   State and behav...
 We separate our real world entities in  different groups Object is an instance of a class                       Ball   ...
 How classes are organized? Why classes need to be organized? Is there any standard way to do it? If yes, whats it?Org...
   How these different attributes of a class    are defined?   fields/properties - state   methods/functions - behavior...
 What is the object oriented way of getting  rich ?     — Inheritance Relations between the classes By the way, are you...
   Have you watched Television?Interface
   Something you use to keep your stuff from    mixing together   Folders   Drives   A customized, more sophisticated ...
What is Abstraction?•   Abstraction - a concept or idea not associated with    any specific instance•   It is all about pe...
Where does abstraction exist?•   Control abstraction    o   Abstraction of actions•   Data abstraction    o   Abstraction ...
How does this relate toprogramming?•   Writing functions/subroutines is control    abstraction.•   Datatypes is data abstr...
Data Abstraction•   Generalization•   Specialization
Examplepublic class Animal extends  LivingThing{                          theChicken = new Animal();       private Locatio...
Its relevance with OOP•   Object is an attempt to combine data and control    abstraction•   Polymorphism•   Inheritence
Why do this?•   Separate the business logic from the underlying    complexity•   Make it easier to parallelize tasks•   Me...
Why do we write programs?
We have the right objects inplace, now what?•   Lets get them talking to each other•   Lets actually tell them what to tal...
What sort of messages?•   Creation•   Invocation•   Destruction
Who generates thesemessages?•   Aliens?           •   Platform•   The Government?   •   User Interaction                  ...
API Designing
String operations                                         I need it to be  Hehehe! The                             menu dr...
Set operations Again! *$%#@                        I need it to be  Menu will be                        menu driven   “Ent...
Don’ts we do Monolithic programs Single file containing all functions Code repetition Thinking less about function signatu...
What we think about API               API
What it actually is  printf(), scanf(), strcmp() Easy to use and hard to misuse                       Spec of DS,        ...
Lets design an API
Designing Process                       (based on suggestions by Joshua Bloch)   Write 2 programs and not one   Write AP...
MVC Architecture
Programming without MVC                                I need it   Linked List                 with GUI    o   add a node...
Challenges Data          Functions        GUI Structures    • Function       • Creating • struct ?      signature        b...
Nightmare beginstypedef struct node{          struct node* nextNode;…}Node;…Node *linkedlist;addNewNode(){         while (...
New requirements Keep different colors for each node I want oval nodes not rectangular nodes I want linked list nodes t...
FB Timeline: Full of GUIComponents
MVC Framework: Coding vs.Architecting                       Its nothing but                       how you design          ...
Model             View             Controller• Handling data   • Display data   • Read data• Save them on                 ...
M-V-C not MVC   Keep them separate   You may create different files    ◦   A separate “model.h”    ◦   A separate “view....
Modeltypedef struct node{                               C++ or other   struct node* nextNode;   int id;                   ...
Viewtypedef struct viewNode{       struct viewNode* nextViewNode;       int xLocation, int yLocation;       String color; ...
Controllertypedef enum input{  ADD,REMOVE,GET_LENGTH…}Input;LinkedList* linkedList = createNewLinkedList();Display* displa...
Questions ?
Upcoming SlideShare
Loading in …5
×

Solid OOPS

366 views
291 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
366
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Solid OOPS

  1. 1. SOLID OOPSConvertingReal world entities into programming Objects ; understanding its applications ; API designing, MVC framework Anirudh Tomer Harshith Keni Toshish Jawale
  2. 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. 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 shortReal World Entity…
  4. 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. 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 programmingobjects
  6. 6.  We separate our real world entities in different groups Object is an instance of a class Ball instances ofWhat is this class?
  7. 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. 8.  How these different attributes of a class are defined? fields/properties - state methods/functions - behavior constructors/initializers destructorsWhat class contains?
  9. 9.  What is the object oriented way of getting rich ? — Inheritance Relations between the classes By the way, are you good at relations?Relations
  10. 10.  Have you watched Television?Interface
  11. 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. 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. 13. Where does abstraction exist?• Control abstraction o Abstraction of actions• Data abstraction o Abstraction of information
  14. 14. How does this relate toprogramming?• Writing functions/subroutines is control abstraction.• Datatypes is data abstraction.
  15. 15. Data Abstraction• Generalization• Specialization
  16. 16. Examplepublic 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. 17. Its relevance with OOP• Object is an attempt to combine data and control abstraction• Polymorphism• Inheritence
  18. 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.
  19. 19. Why do we write programs?
  20. 20. We have the right objects inplace, now what?• Lets get them talking to each other• Lets actually tell them what to talk about
  21. 21. What sort of messages?• Creation• Invocation• Destruction
  22. 22. Who generates thesemessages?• Aliens? • Platform• The Government? • User Interaction • Events
  23. 23. API Designing
  24. 24. String operations I need it to be Hehehe! The menu driven whole 2 hours I will just write a fancy menu Programming Lab I
  25. 25. Set operations Again! *$%#@ I need it to be Menu will be menu driven “Enter 1 to proceed 0 to exit” Programming Lab I
  26. 26. Don’ts we do Monolithic programs Single file containing all functions Code repetition Thinking less about function signature Reinventing the wheel
  27. 27. What we think about API  API
  28. 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
  29. 29. Lets design an API
  30. 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
  31. 31. MVC Architecture
  32. 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. 33. Challenges Data Functions GUI Structures • Function • Creating • struct ? signature boxes • Separate • Flow control • Moving variables boxes
  34. 34. Nightmare beginstypedef 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. 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
  36. 36. FB Timeline: Full of GUIComponents
  37. 37. MVC Framework: Coding vs.Architecting Its nothing but how you design your code.
  38. 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 modelRoles: Model, View and Controller
  39. 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. 40. Modeltypedef struct node{ C++ or other struct node* nextNode; int id; OOP languages … make finding the}Node;int globalId = 0; context easytypedef 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. 41. Viewtypedef struct viewNode{ struct viewNode* nextViewNode; int xLocation, int yLocation; String color; //#FF3e2A (in hex)…}ViewNode;//Similar to Model create another structtypedef 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. 42. Controllertypedef enum input{ ADD,REMOVE,GET_LENGTH…}Input;LinkedList* linkedList = createNewLinkedList();Display* display = createNewDisplay();//Show a fancy menuInput input = read input from user;switch(input){ case ADD: Node* newNode = //malloc new node; addNode(linkedList->id,newNode); addDisplayNode(display->id,newNode); break;}
  43. 43. Questions ?

×