SlideShare a Scribd company logo
1 of 43
SOLID OOPS
ConvertingReal world entities into programming Objects ;
  understanding its applications ; API designing, MVC framework




                                                    Anirudh Tomer
                                                     Harshith Keni
                                                    Toshish Jawale
   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
 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…
 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?
   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
 We separate our real world entities in
  different groups
 Object is an instance of a class


                       Ball



                    instances of




What is this class?
 How classes are organized?
 Why classes need to be organized?
 Is there any standard way to do it?
 If yes, whats it?




Organization
   How these different attributes of a class
    are defined?
   fields/properties - state
   methods/functions - behavior
   constructors/initializers
   destructors




What class contains?
 What is the object oriented way of getting
  rich ?
     — Inheritance
 Relations between the classes
 By the way, are you good at relations?




Relations
   Have you watched Television?




Interface
   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
What is Abstraction?
•   Abstraction - a concept or idea not associated with
    any specific instance

•   It is all about perspective
    •   Everything
    •   Something
    •   Exactly the thing
Where does abstraction exist?
•   Control abstraction
    o   Abstraction of actions


•   Data abstraction
    o   Abstraction of information
How does this relate to
programming?
•   Writing functions/subroutines is control
    abstraction.
•   Datatypes is data abstraction.
Data Abstraction
•   Generalization
•   Specialization
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;
       }}
It's 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
•   Meaningful amount of details are exposed
•   Representation in a similar form in semantics
    (meaning) while hiding implementation details.
Why do we write programs?
We have the right objects in
place, now what?
•   Let's get them talking to each other
•   Let's actually tell them what to talk about
What sort of messages?
•   Creation
•   Invocation
•   Destruction
Who generates these
messages?
•   Aliens?           •   Platform
•   The Government?   •   User Interaction
                      •   Events
API Designing
String operations
                                         I need it to be
  Hehehe! The                             menu driven
 whole 2 hours I
 will just write a
  fancy menu




                     Programming Lab I
Set operations

 Again! *$%#@                        I need it to be
  Menu will be                        menu driven
   “Enter 1 to
  proceed 0 to
      exit”




                 Programming Lab I
Don’ts we do
 Monolithic programs
 Single file containing all functions
 Code repetition
 Thinking less about function signature
 Reinventing the wheel
What we think about API 




              API
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
Lets design an API
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
MVC Architecture
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__| …
Challenges


 Data          Functions        GUI
 Structures    • Function       • Creating
 • struct ?      signature        boxes
 • Separate    • Flow control   • Moving
   variables                      boxes
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();
         }
}
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
FB Timeline: Full of GUI
Components
MVC Framework: Coding vs.
Architecting




                       Its nothing but
                       how you design
                       your code.
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
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
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;
}
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
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;
}
Questions ?

More Related Content

What's hot

Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptForziatech
 
Design patterns illustrated 010PHP
Design patterns illustrated 010PHPDesign patterns illustrated 010PHP
Design patterns illustrated 010PHPHerman Peeren
 
Jazoon 2010 - Building DSLs with Eclipse
Jazoon 2010 - Building DSLs with EclipseJazoon 2010 - Building DSLs with Eclipse
Jazoon 2010 - Building DSLs with EclipsePeter Friese
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptzand3rs
 
iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development IntroLuis Azevedo
 
Scalable JavaScript Design Patterns
Scalable JavaScript Design PatternsScalable JavaScript Design Patterns
Scalable JavaScript Design PatternsAddy Osmani
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?ColdFusionConference
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
Lab#1 - Front End Development
Lab#1 - Front End DevelopmentLab#1 - Front End Development
Lab#1 - Front End DevelopmentWalid Ashraf
 
Design patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjsDesign patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjsRavi Bhadauria
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayChamnap Chhorn
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScriptFu Cheng
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans Fabrizio Giudici
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript BasicsMindfire Solutions
 
Learning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksLearning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksCalvin Cheng
 
An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScripttonyh1
 

What's hot (20)

Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Design patterns illustrated 010PHP
Design patterns illustrated 010PHPDesign patterns illustrated 010PHP
Design patterns illustrated 010PHP
 
Jazoon 2010 - Building DSLs with Eclipse
Jazoon 2010 - Building DSLs with EclipseJazoon 2010 - Building DSLs with Eclipse
Jazoon 2010 - Building DSLs with Eclipse
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScript
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
 
Scalable JavaScript Design Patterns
Scalable JavaScript Design PatternsScalable JavaScript Design Patterns
Scalable JavaScript Design Patterns
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Lab#1 - Front End Development
Lab#1 - Front End DevelopmentLab#1 - Front End Development
Lab#1 - Front End Development
 
Design patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjsDesign patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjs
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Introduction to JavaScript Basics.
Introduction to JavaScript Basics.Introduction to JavaScript Basics.
Introduction to JavaScript Basics.
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript Basics
 
Javascript functions
Javascript functionsJavascript functions
Javascript functions
 
Learning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeksLearning iOS and hunting NSZombies in 3 weeks
Learning iOS and hunting NSZombies in 3 weeks
 
An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScript
 

Viewers also liked

Tong quan co so du lieu
Tong quan co so du lieuTong quan co so du lieu
Tong quan co so du lieuPhùng Duy
 
Chuanhoa complete
Chuanhoa completeChuanhoa complete
Chuanhoa completePhùng Duy
 
Dai so quan he
Dai so quan heDai so quan he
Dai so quan hePhùng Duy
 
Rang buoc toan ven
Rang buoc toan venRang buoc toan ven
Rang buoc toan venPhùng Duy
 
Brain to Brain - Journey of Mouse click
Brain to Brain - Journey of Mouse clickBrain to Brain - Journey of Mouse click
Brain to Brain - Journey of Mouse clickToshish Jawale
 
Oop’s Concept and its Real Life Applications
Oop’s Concept and its Real Life ApplicationsOop’s Concept and its Real Life Applications
Oop’s Concept and its Real Life ApplicationsShar_1
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sqlPhùng Duy
 

Viewers also liked (9)

Pth complete
Pth completePth complete
Pth complete
 
Tong quan co so du lieu
Tong quan co so du lieuTong quan co so du lieu
Tong quan co so du lieu
 
Big history2
Big history2Big history2
Big history2
 
Chuanhoa complete
Chuanhoa completeChuanhoa complete
Chuanhoa complete
 
Dai so quan he
Dai so quan heDai so quan he
Dai so quan he
 
Rang buoc toan ven
Rang buoc toan venRang buoc toan ven
Rang buoc toan ven
 
Brain to Brain - Journey of Mouse click
Brain to Brain - Journey of Mouse clickBrain to Brain - Journey of Mouse click
Brain to Brain - Journey of Mouse click
 
Oop’s Concept and its Real Life Applications
Oop’s Concept and its Real Life ApplicationsOop’s Concept and its Real Life Applications
Oop’s Concept and its Real Life Applications
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sql
 

Similar to Solid OOPS

Tell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature FlagsTell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature FlagsJorge Ortiz
 
Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Greg Szczotka
 
Dependency Injection and Autofac
Dependency Injection and AutofacDependency Injection and Autofac
Dependency Injection and Autofacmeghantaylor
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternNishith Shukla
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsLalit Kale
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)David McCarter
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)David McCarter
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
 
Understanding iOS from an Android perspective
Understanding iOS from an Android perspectiveUnderstanding iOS from an Android perspective
Understanding iOS from an Android perspectiveLauren Yew
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript Corley S.r.l.
 
Effective Scala: Programming Patterns
Effective Scala: Programming PatternsEffective Scala: Programming Patterns
Effective Scala: Programming PatternsVasil Remeniuk
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical MementoOdoo
 
Content Staging in Drupal 8
Content Staging in Drupal 8Content Staging in Drupal 8
Content Staging in Drupal 8Dick Olsson
 

Similar to Solid OOPS (20)

Tell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature FlagsTell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature Flags
 
Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014
 
Dependency Injection and Autofac
Dependency Injection and AutofacDependency Injection and Autofac
Dependency Injection and Autofac
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design Patterns
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Robots in Swift
Robots in SwiftRobots in Swift
Robots in Swift
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
Understanding iOS from an Android perspective
Understanding iOS from an Android perspectiveUnderstanding iOS from an Android perspective
Understanding iOS from an Android perspective
 
Drupal 7 ci and testing
Drupal 7 ci and testingDrupal 7 ci and testing
Drupal 7 ci and testing
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript
 
AngularConf2015
AngularConf2015AngularConf2015
AngularConf2015
 
AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014
 
Thinking In Swift
Thinking In SwiftThinking In Swift
Thinking In Swift
 
Effective Scala: Programming Patterns
Effective Scala: Programming PatternsEffective Scala: Programming Patterns
Effective Scala: Programming Patterns
 
Dependency injectionpreso
Dependency injectionpresoDependency injectionpreso
Dependency injectionpreso
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical Memento
 
Content Staging in Drupal 8
Content Staging in Drupal 8Content Staging in Drupal 8
Content Staging in Drupal 8
 

Recently uploaded

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 

Recently uploaded (20)

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 

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
  • 10. Have you watched Television? Interface
  • 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.
  • 15. Data Abstraction • Generalization • Specialization
  • 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.
  • 19. Why do we write programs?
  • 20. We have the right objects in place, now what? • Let's get them talking to each other • Let's actually tell them what to talk about
  • 21. What sort of messages? • Creation • Invocation • Destruction
  • 22. Who generates these messages? • Aliens? • Platform • The Government? • User Interaction • Events
  • 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. Set operations Again! *$%#@ I need it to be Menu will be menu driven “Enter 1 to proceed 0 to exit” Programming Lab I
  • 26. Don’ts we do Monolithic programs Single file containing all functions Code repetition Thinking less about function signature Reinventing the wheel
  • 27. What we think about API  API
  • 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
  • 36. FB Timeline: Full of GUI Components
  • 37. MVC Framework: Coding vs. Architecting Its nothing but how you design your code.
  • 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; }