SlideShare a Scribd company logo
1
Introduction to OOP
& Design Principles
Trenton Computer Festival
March 18, 2017
Michael P. Redlich
@mpredli
about.me/mpredli/
Who’s Mike?
• BS in CS from
• “Petrochemical Research Organization”
• Java Queue News Editor, InfoQ
• Ai-Logix, Inc. (now AudioCodes)
• Amateur Computer Group of New Jersey
2
Objectives (2)
• Object-Oriented Programming
• Object-Oriented Design Principles
• Live Demos (yea!)
3
Object-Oriented
Programming (OOP)
4
Some OOP Languages
• Ada
• C++
• Eiffel
• Java
• Modula-3
• Objective C
• OO-Cobol
• Python
• Simula
• Smalltalk
• Theta
5
What is OOP?
• A programming paradigm that is focused on
objects and data
• as opposed to actions and logic
• Objects are identified to model a system
• Objects are designed to interact with each
other
6
OOP Basics (1)
• Procedure-Oriented
• Top Down/Bottom Up
• Structured programming
• Centered around an
algorithm
• Identify tasks; how
something is done
• Object-Oriented
• Identify objects to be
modeled
• Concentrate on what an
object does
• Hide how an object
performs its task
• Identify behavior
7
OOP Basics (2)
• Abstract Data Type (ADT)
• user-defined data type
• use of objects through functions (methods)
without knowing the internal representation
8
OOP Basics (3)
• Interface
• functions (methods) provided in the ADT that
allow access to data
• Implementation
• underlying data structure(s) and business logic
within the ADT
9
OOP Basics (4)
• Class
• Defines a model
• Declares attributes
• Declares behavior
• Is an ADT
• Object
• Is an instance of a class
• Has state
• Has behavior
• May have many unique
objects of the same class
10
OOP Attributes
• Four (4) Main Attributes:
• data encapsulation
• data abstraction
• inheritance
• polymorphism
11
Data Encapsulation
• Separates the implementation from the
interface
• A public view of an object, but
implementation is private
• access to data is only allowed through a defined
interface
12
Data Abstraction
• A model of an entity
• Defines a data type by its functionality as
opposed to its implementation
13
Inheritance
• A means for defining a new class as an
extension of a previously defined class
• The derived class inherits all attributes and
behavior of the base class
• “IS-A” relationship
• Baseball is a Sport
14
Polymorphism
• The ability of different objects to respond
differently to the same function
• From the Greek meaning “many forms”
• A mechanism provided by an OOP
language as opposed to a programmer-
provided workaround
15
Advantages of OOP
• Interface can (and should) remain
unchanged when improving implementation
• Encourages modularity in application
development
• Better maintainability of code
• Code reuse
• Emphasis on what, not how
16
Classes (1)
• A user-defined abstract data type
• Extension of C structs
• Contain:
• constructor
• destructor
• data members and member functions (methods)
17
Classes (2)
• Static/Dynamic object instantiation
• Multiple Constructors:
• Sports(void);
• Sports(char *,int,int);
• Sports(float,char *,int);
18
Classes (3)
• Class scope (C++)
• scope resolution operator (::)
• Abstract Classes
• contain at least one pure virtual member
function (C++)
• contain at least one abstract method (Java)
19
Classes (3)
• Abstract Classes
• contain at least one pure virtual member
function (C++)
• contain at least one abstract method (Java)
20
Abstract Classes
• Pure virtual member function (C++)
• virtual void draw() = 0;
• Abstract method (Java)
• public abstract void draw();
21
Class Inheritance
22
Static Instantiation
(C++)
• Object creation:
• Baseball mets(“Mets”,97,65);
• Access to public member functions:
• mets.getWin(); // returns 97
23
Dynamic Instantiation
(C++)
• Object creation:
• Baseball *mets = new
Baseball(“Mets”,97,65);
• Access to public member functions:
• mets->getWin(); // returns 97
24
Dynamic Instantiation
(Java)
• Object creation:
• Baseball mets = new
Baseball(“Mets”,97,65);
• Access to public member functions:
• mets.getWin(); // returns 97
25
Deleting Objects (C++)
Baseball mets(“Mets”,97,65);
// object deleted when out of scope
Baseball *mets = new
Baseball(“Mets”,97,65);
delete mets; // required call
26
Deleting Objects (Java)
Baseball mets = new
Baseball(“Mets”,97,65);
// automatic garbage collection or:
System.gc(); // explicit call
27
Object-Oriented
Design Principles
28
What are OO Design
Principles?
• A set of underlying principles for creating
flexible designs that are easy to maintain
and adaptable to change
• Understanding the basics of OOP isn’t
enough
29
Some OO Design
Principles (1)
• Encapsulate WhatVaries
• Program to Interfaces, Not
Implementations
• Favor Composition Over Inheritance
• Classes Should Be Open for Extension, But
Closed for Modification
30
Some OO Design
Principles (2)
• Strive for Loosely Coupled Designs
Between Objects That Interact
• A Class Should Have Only One Reason to
Change
31
Encapsulate What
Varies
• Identify and encapsulate areas of code that
vary
• Encapsulated code can be altered without
affecting code that doesn’t vary
• Forms the basis for almost all of the
original Design Patterns
32
33
// OrderCars class
public class OrderCars {
public Car orderCar(String model) {
Car car;
if(model.equals(“Charger”))
car = new Dodge(model);
else if(model.equals(“Corvette”))
car = new Chevrolet(model);
else if(model.equals(“Mustang”))
car = new Ford(model);
car.buildCar();
car.testCar();
car.shipCar();
}
}
Demo Time…
34
Program to Interfaces,
Not Implementations
• Eliminates being locked-in to a specific
implementation
• An interface declares generic behavior
• Concrete class(es) implement methods
defined in an interface
35
36
// Dog class
public class Dog {
public void bark() {
System.out.println(“woof”);
}
// Cat class
public class Cat {
public void meow() {
System.out.println(“meow”);
}
}
37
// Animals class - main application
public class Animals {
public static void main(String[] args) {
Dog dog = new Dog();
dog.bark();
Cat cat = new Cat();
cat.meow();
}
}
// output
woof
meow
38
// Animal interface
public interface Animal {
public void makeNoise();
}
39
// Dog class (revised)
public class Dog implements Animal {
public void makeNoise() {
bark();
}
public void bark() {
System.out.println(“woof”);
}
// Cat class (revised)
public class Cat implements Animal {
public void makeNoise() {
meow();
}
public void meow() {
System.out.println(“meow”);
}
}
40
// Animals class - main application (revised)
public class Animals {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeNoise();
Animal cat = new Cat();
cat.makeNoise();
}
}
// output
woof
meow
Demo Time…
41
Favor Composition
Over Inheritance
• “HAS-A” can be better than “IS-A”
• Eliminates excessive use of subclassing
• An object’s behavior can be modified
through composition as opposed through
inheritance
• Allows change in object behavior at run-
time
42
Classes Should Be
Open for Extension...
• ...But Closed for Modification
• “Come in,We’re Open”
• extend the class to add new behavior
• “Sorry,We’re Closed”
• the code must remain closed to modification
43
A Simple Hierarchy...
44
...That Quickly
Becomes Complex!
45
Refactored Design
46
Demo Time…
47
Strive for Loosely
Coupled Designs...
• ...Between Objects That Interact
• Allows you to build flexible OO systems
that can handle change
• interdependency is minimized
• Changes to one object won’t affect another
object
• Objects can be used independently
48
Demo Time…
49
A Class Should Have...
• ...Only One Reason to Change
• Classes can inadvertently assume too many
responsibilities
• interdependency is minimized
• cross-cutting concerns
• Assign a responsibility to one class, and
only one class
50
Local C++ User
Groups
• ACGNJ C++ Users Group
• facilitated by Bruce Arnold
• acgnj.barnold.us
51
Local Java User Groups
(1)
• ACGNJ Java Users Group
• facilitated by Mike Redlich
• javasig.org
• Princeton Java Users Group
• facilitated byYakov Fain
• meetup.com/NJFlex
52
Local Java User Groups
(2)
• NYJavaSIG
• facilitated by Frank Greco
• javasig.com
• PhillyJUG
• facilitated by Martin Snyder, et. al.
• meetup.com/PhillyJUG
53
Local Java User Groups
(3)
• Capital District Java Developers Network
• facilitated by Dan Patsey
• cdjdn.com
• currently restructuring
54
Further Reading
55
56
Resources
•java.sun.com
•headfirstlabs.com
•themeteorbook.com
•eventedmind.com
•atmosphere.meteor.com
Upcoming Events
• ACGNJ Java Users Group
• Dr. Venkat Subramaniam
• Monday, March 19, 2018
• DorothyYoung Center for the Arts, Room 106
• Drew University
• 7:30-9:00pm
• “Twelve Ways to Make Code Suck Less”
57
58
Thanks!
mike@redlich.net
@mpredli
slideshare.net/mpredli01
github.com/mpredli01
https://www.surveymonkey.com/
r/B2BYTFH
Upcoming Events
• March 17-18, 2017
•tcf-nj.org
• April 18-19, 2017
•phillyemergingtech.com
59
Ad

Recommended

Introduction to Object Oriented Programming & Design Principles
Introduction to Object Oriented Programming & Design Principles
Michael Redlich
 
Getting Started with Java
Getting Started with Java
Michael Redlich
 
The View object orientated programming in Lotuscript
The View object orientated programming in Lotuscript
Bill Buchan
 
Introduction to java
Introduction to java
AbhishekMondal42
 
Intro to java programming
Intro to java programming
Leah Stephens
 
Java
Java
Prabhat gangwar
 
RIBBUN SOFTWARE
RIBBUN SOFTWARE
mosewoodward24
 
Introduction what is java
Introduction what is java
sanjeeviniindia1186
 
Getting started with C++
Getting started with C++
Michael Redlich
 
Getting Started with Java (TCF 2014)
Getting Started with Java (TCF 2014)
Michael Redlich
 
Python
Python
Trainme Softtech
 
Getting Started with C++
Getting Started with C++
Michael Redlich
 
Abstract classes & interfaces
Abstract classes & interfaces
moazamali28
 
Object oriented programming
Object oriented programming
MH Abid
 
Common issues, rules and principles
Common issues, rules and principles
Mnats Karakhanyan
 
ORMs Meet SQL
ORMs Meet SQL
Ricardo Peres
 
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Michael Redlich
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
Skills Matter
 
Java Programming Important Topics
Java Programming Important Topics
SANJAYMANVATKAR1
 
Preliminary committee presentation
Preliminary committee presentation
Richard Drake
 
OOPs fundamentals session for freshers in my office (Aug 5, 13)
OOPs fundamentals session for freshers in my office (Aug 5, 13)
Ashoka R K T
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
Sam Bowne
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
Improving Software Quality Using Object Oriented Design Principles
Improving Software Quality Using Object Oriented Design Principles
Dr. Syed Hassan Amin
 
Clean code presentation
Clean code presentation
Bhavin Gandhi
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
01-introductionto Object ooriented Programming in JAVA CS.ppt
01-introductionto Object ooriented Programming in JAVA CS.ppt
GESISLAMIAPATTOKI
 
Objective-C for iOS Application Development
Objective-C for iOS Application Development
Dhaval Kaneria
 
Nodejs Chapter 3 - Design Pattern
Nodejs Chapter 3 - Design Pattern
Talentica Software
 
C++ in object oriented programming
C++ in object oriented programming
Saket Khopkar
 

More Related Content

What's hot (11)

Getting started with C++
Getting started with C++
Michael Redlich
 
Getting Started with Java (TCF 2014)
Getting Started with Java (TCF 2014)
Michael Redlich
 
Python
Python
Trainme Softtech
 
Getting Started with C++
Getting Started with C++
Michael Redlich
 
Abstract classes & interfaces
Abstract classes & interfaces
moazamali28
 
Object oriented programming
Object oriented programming
MH Abid
 
Common issues, rules and principles
Common issues, rules and principles
Mnats Karakhanyan
 
ORMs Meet SQL
ORMs Meet SQL
Ricardo Peres
 
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Michael Redlich
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
Skills Matter
 
Java Programming Important Topics
Java Programming Important Topics
SANJAYMANVATKAR1
 
Getting started with C++
Getting started with C++
Michael Redlich
 
Getting Started with Java (TCF 2014)
Getting Started with Java (TCF 2014)
Michael Redlich
 
Getting Started with C++
Getting Started with C++
Michael Redlich
 
Abstract classes & interfaces
Abstract classes & interfaces
moazamali28
 
Object oriented programming
Object oriented programming
MH Abid
 
Common issues, rules and principles
Common issues, rules and principles
Mnats Karakhanyan
 
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Michael Redlich
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
Skills Matter
 
Java Programming Important Topics
Java Programming Important Topics
SANJAYMANVATKAR1
 

Similar to Introduction to Object Oriented Programming & Design Principles (20)

Preliminary committee presentation
Preliminary committee presentation
Richard Drake
 
OOPs fundamentals session for freshers in my office (Aug 5, 13)
OOPs fundamentals session for freshers in my office (Aug 5, 13)
Ashoka R K T
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
Sam Bowne
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
Improving Software Quality Using Object Oriented Design Principles
Improving Software Quality Using Object Oriented Design Principles
Dr. Syed Hassan Amin
 
Clean code presentation
Clean code presentation
Bhavin Gandhi
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
01-introductionto Object ooriented Programming in JAVA CS.ppt
01-introductionto Object ooriented Programming in JAVA CS.ppt
GESISLAMIAPATTOKI
 
Objective-C for iOS Application Development
Objective-C for iOS Application Development
Dhaval Kaneria
 
Nodejs Chapter 3 - Design Pattern
Nodejs Chapter 3 - Design Pattern
Talentica Software
 
C++ in object oriented programming
C++ in object oriented programming
Saket Khopkar
 
Solid Principles Of Design (Design Series 01)
Solid Principles Of Design (Design Series 01)
Heartin Jacob
 
Software enginering.group-no-11 (1)
Software enginering.group-no-11 (1)
riarana10
 
Objected-Oriented Programming with Java
Objected-Oriented Programming with Java
Oum Saokosal
 
Java Fundamentalojhgghjjjjhhgghhjjjjhhj.ppt
Java Fundamentalojhgghjjjjhhgghhjjjjhhj.ppt
akashsachu221
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - Encapsulation
Chihyang Li
 
OOP-1.pptx
OOP-1.pptx
iansebuabeh
 
"SOLID" Object Oriented Design Principles
"SOLID" Object Oriented Design Principles
Serhiy Oplakanets
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe
 
Software Design
Software Design
Ahmed Misbah
 
Preliminary committee presentation
Preliminary committee presentation
Richard Drake
 
OOPs fundamentals session for freshers in my office (Aug 5, 13)
OOPs fundamentals session for freshers in my office (Aug 5, 13)
Ashoka R K T
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
Sam Bowne
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
Improving Software Quality Using Object Oriented Design Principles
Improving Software Quality Using Object Oriented Design Principles
Dr. Syed Hassan Amin
 
Clean code presentation
Clean code presentation
Bhavin Gandhi
 
8. Software Development Security
8. Software Development Security
Sam Bowne
 
01-introductionto Object ooriented Programming in JAVA CS.ppt
01-introductionto Object ooriented Programming in JAVA CS.ppt
GESISLAMIAPATTOKI
 
Objective-C for iOS Application Development
Objective-C for iOS Application Development
Dhaval Kaneria
 
Nodejs Chapter 3 - Design Pattern
Nodejs Chapter 3 - Design Pattern
Talentica Software
 
C++ in object oriented programming
C++ in object oriented programming
Saket Khopkar
 
Solid Principles Of Design (Design Series 01)
Solid Principles Of Design (Design Series 01)
Heartin Jacob
 
Software enginering.group-no-11 (1)
Software enginering.group-no-11 (1)
riarana10
 
Objected-Oriented Programming with Java
Objected-Oriented Programming with Java
Oum Saokosal
 
Java Fundamentalojhgghjjjjhhgghhjjjjhhj.ppt
Java Fundamentalojhgghjjjjhhgghhjjjjhhj.ppt
akashsachu221
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - Encapsulation
Chihyang Li
 
"SOLID" Object Oriented Design Principles
"SOLID" Object Oriented Design Principles
Serhiy Oplakanets
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe
 
Ad

More from Michael Redlich (16)

Getting Started with GitHub
Getting Started with GitHub
Michael Redlich
 
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Michael Redlich
 
Building Microservices with Helidon: Oracle's New Java Microservices Framework
Building Microservices with Helidon: Oracle's New Java Microservices Framework
Michael Redlich
 
C++ Advanced Features
C++ Advanced Features
Michael Redlich
 
Java Advanced Features
Java Advanced Features
Michael Redlich
 
C++ Advanced Features
C++ Advanced Features
Michael Redlich
 
Building Realtime Access to Data Apps with jOOQ
Building Realtime Access to Data Apps with jOOQ
Michael Redlich
 
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
Michael Redlich
 
Building Realtime Web Apps with Angular and Meteor
Building Realtime Web Apps with Angular and Meteor
Michael Redlich
 
Java Advanced Features (TCF 2014)
Java Advanced Features (TCF 2014)
Michael Redlich
 
Getting Started with Meteor (TCF ITPC 2014)
Getting Started with Meteor (TCF ITPC 2014)
Michael Redlich
 
Getting Started with C++ (TCF 2014)
Getting Started with C++ (TCF 2014)
Michael Redlich
 
C++ Advanced Features (TCF 2014)
C++ Advanced Features (TCF 2014)
Michael Redlich
 
Getting Started with MongoDB (TCF ITPC 2014)
Getting Started with MongoDB (TCF ITPC 2014)
Michael Redlich
 
Getting Started with MongoDB
Getting Started with MongoDB
Michael Redlich
 
Getting Started with Meteor
Getting Started with Meteor
Michael Redlich
 
Getting Started with GitHub
Getting Started with GitHub
Michael Redlich
 
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Michael Redlich
 
Building Microservices with Helidon: Oracle's New Java Microservices Framework
Building Microservices with Helidon: Oracle's New Java Microservices Framework
Michael Redlich
 
Building Realtime Access to Data Apps with jOOQ
Building Realtime Access to Data Apps with jOOQ
Michael Redlich
 
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
Michael Redlich
 
Building Realtime Web Apps with Angular and Meteor
Building Realtime Web Apps with Angular and Meteor
Michael Redlich
 
Java Advanced Features (TCF 2014)
Java Advanced Features (TCF 2014)
Michael Redlich
 
Getting Started with Meteor (TCF ITPC 2014)
Getting Started with Meteor (TCF ITPC 2014)
Michael Redlich
 
Getting Started with C++ (TCF 2014)
Getting Started with C++ (TCF 2014)
Michael Redlich
 
C++ Advanced Features (TCF 2014)
C++ Advanced Features (TCF 2014)
Michael Redlich
 
Getting Started with MongoDB (TCF ITPC 2014)
Getting Started with MongoDB (TCF ITPC 2014)
Michael Redlich
 
Getting Started with MongoDB
Getting Started with MongoDB
Michael Redlich
 
Getting Started with Meteor
Getting Started with Meteor
Michael Redlich
 
Ad

Recently uploaded (20)

What is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdf
Varsha Nayak
 
How Insurance Policy Management Software Streamlines Operations
How Insurance Policy Management Software Streamlines Operations
Insurance Tech Services
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Looking for a BIRT Report Alternative Here’s Why Helical Insight Stands Out.pdf
Looking for a BIRT Report Alternative Here’s Why Helical Insight Stands Out.pdf
Varsha Nayak
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Open Source Software Development Methods
Open Source Software Development Methods
VICTOR MAESTRE RAMIREZ
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Artificial Intelligence Workloads and Data Center Management
Artificial Intelligence Workloads and Data Center Management
SandeepKS52
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Tech Services
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Migrating to Azure Cosmos DB the Right Way
Migrating to Azure Cosmos DB the Right Way
Alexander (Alex) Komyagin
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Download Adobe Illustrator Crack free for Windows 2025?
Download Adobe Illustrator Crack free for Windows 2025?
grete1122g
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 
What is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdf
Varsha Nayak
 
How Insurance Policy Management Software Streamlines Operations
How Insurance Policy Management Software Streamlines Operations
Insurance Tech Services
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Looking for a BIRT Report Alternative Here’s Why Helical Insight Stands Out.pdf
Looking for a BIRT Report Alternative Here’s Why Helical Insight Stands Out.pdf
Varsha Nayak
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Open Source Software Development Methods
Open Source Software Development Methods
VICTOR MAESTRE RAMIREZ
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Artificial Intelligence Workloads and Data Center Management
Artificial Intelligence Workloads and Data Center Management
SandeepKS52
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Underwriting Software Enhancing Accuracy and Efficiency
Insurance Tech Services
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Download Adobe Illustrator Crack free for Windows 2025?
Download Adobe Illustrator Crack free for Windows 2025?
grete1122g
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 

Introduction to Object Oriented Programming & Design Principles

  • 1. 1 Introduction to OOP & Design Principles Trenton Computer Festival March 18, 2017 Michael P. Redlich @mpredli about.me/mpredli/
  • 2. Who’s Mike? • BS in CS from • “Petrochemical Research Organization” • Java Queue News Editor, InfoQ • Ai-Logix, Inc. (now AudioCodes) • Amateur Computer Group of New Jersey 2
  • 3. Objectives (2) • Object-Oriented Programming • Object-Oriented Design Principles • Live Demos (yea!) 3
  • 5. Some OOP Languages • Ada • C++ • Eiffel • Java • Modula-3 • Objective C • OO-Cobol • Python • Simula • Smalltalk • Theta 5
  • 6. What is OOP? • A programming paradigm that is focused on objects and data • as opposed to actions and logic • Objects are identified to model a system • Objects are designed to interact with each other 6
  • 7. OOP Basics (1) • Procedure-Oriented • Top Down/Bottom Up • Structured programming • Centered around an algorithm • Identify tasks; how something is done • Object-Oriented • Identify objects to be modeled • Concentrate on what an object does • Hide how an object performs its task • Identify behavior 7
  • 8. OOP Basics (2) • Abstract Data Type (ADT) • user-defined data type • use of objects through functions (methods) without knowing the internal representation 8
  • 9. OOP Basics (3) • Interface • functions (methods) provided in the ADT that allow access to data • Implementation • underlying data structure(s) and business logic within the ADT 9
  • 10. OOP Basics (4) • Class • Defines a model • Declares attributes • Declares behavior • Is an ADT • Object • Is an instance of a class • Has state • Has behavior • May have many unique objects of the same class 10
  • 11. OOP Attributes • Four (4) Main Attributes: • data encapsulation • data abstraction • inheritance • polymorphism 11
  • 12. Data Encapsulation • Separates the implementation from the interface • A public view of an object, but implementation is private • access to data is only allowed through a defined interface 12
  • 13. Data Abstraction • A model of an entity • Defines a data type by its functionality as opposed to its implementation 13
  • 14. Inheritance • A means for defining a new class as an extension of a previously defined class • The derived class inherits all attributes and behavior of the base class • “IS-A” relationship • Baseball is a Sport 14
  • 15. Polymorphism • The ability of different objects to respond differently to the same function • From the Greek meaning “many forms” • A mechanism provided by an OOP language as opposed to a programmer- provided workaround 15
  • 16. Advantages of OOP • Interface can (and should) remain unchanged when improving implementation • Encourages modularity in application development • Better maintainability of code • Code reuse • Emphasis on what, not how 16
  • 17. Classes (1) • A user-defined abstract data type • Extension of C structs • Contain: • constructor • destructor • data members and member functions (methods) 17
  • 18. Classes (2) • Static/Dynamic object instantiation • Multiple Constructors: • Sports(void); • Sports(char *,int,int); • Sports(float,char *,int); 18
  • 19. Classes (3) • Class scope (C++) • scope resolution operator (::) • Abstract Classes • contain at least one pure virtual member function (C++) • contain at least one abstract method (Java) 19
  • 20. Classes (3) • Abstract Classes • contain at least one pure virtual member function (C++) • contain at least one abstract method (Java) 20
  • 21. Abstract Classes • Pure virtual member function (C++) • virtual void draw() = 0; • Abstract method (Java) • public abstract void draw(); 21
  • 23. Static Instantiation (C++) • Object creation: • Baseball mets(“Mets”,97,65); • Access to public member functions: • mets.getWin(); // returns 97 23
  • 24. Dynamic Instantiation (C++) • Object creation: • Baseball *mets = new Baseball(“Mets”,97,65); • Access to public member functions: • mets->getWin(); // returns 97 24
  • 25. Dynamic Instantiation (Java) • Object creation: • Baseball mets = new Baseball(“Mets”,97,65); • Access to public member functions: • mets.getWin(); // returns 97 25
  • 26. Deleting Objects (C++) Baseball mets(“Mets”,97,65); // object deleted when out of scope Baseball *mets = new Baseball(“Mets”,97,65); delete mets; // required call 26
  • 27. Deleting Objects (Java) Baseball mets = new Baseball(“Mets”,97,65); // automatic garbage collection or: System.gc(); // explicit call 27
  • 29. What are OO Design Principles? • A set of underlying principles for creating flexible designs that are easy to maintain and adaptable to change • Understanding the basics of OOP isn’t enough 29
  • 30. Some OO Design Principles (1) • Encapsulate WhatVaries • Program to Interfaces, Not Implementations • Favor Composition Over Inheritance • Classes Should Be Open for Extension, But Closed for Modification 30
  • 31. Some OO Design Principles (2) • Strive for Loosely Coupled Designs Between Objects That Interact • A Class Should Have Only One Reason to Change 31
  • 32. Encapsulate What Varies • Identify and encapsulate areas of code that vary • Encapsulated code can be altered without affecting code that doesn’t vary • Forms the basis for almost all of the original Design Patterns 32
  • 33. 33 // OrderCars class public class OrderCars { public Car orderCar(String model) { Car car; if(model.equals(“Charger”)) car = new Dodge(model); else if(model.equals(“Corvette”)) car = new Chevrolet(model); else if(model.equals(“Mustang”)) car = new Ford(model); car.buildCar(); car.testCar(); car.shipCar(); } }
  • 35. Program to Interfaces, Not Implementations • Eliminates being locked-in to a specific implementation • An interface declares generic behavior • Concrete class(es) implement methods defined in an interface 35
  • 36. 36 // Dog class public class Dog { public void bark() { System.out.println(“woof”); } // Cat class public class Cat { public void meow() { System.out.println(“meow”); } }
  • 37. 37 // Animals class - main application public class Animals { public static void main(String[] args) { Dog dog = new Dog(); dog.bark(); Cat cat = new Cat(); cat.meow(); } } // output woof meow
  • 38. 38 // Animal interface public interface Animal { public void makeNoise(); }
  • 39. 39 // Dog class (revised) public class Dog implements Animal { public void makeNoise() { bark(); } public void bark() { System.out.println(“woof”); } // Cat class (revised) public class Cat implements Animal { public void makeNoise() { meow(); } public void meow() { System.out.println(“meow”); } }
  • 40. 40 // Animals class - main application (revised) public class Animals { public static void main(String[] args) { Animal dog = new Dog(); dog.makeNoise(); Animal cat = new Cat(); cat.makeNoise(); } } // output woof meow
  • 42. Favor Composition Over Inheritance • “HAS-A” can be better than “IS-A” • Eliminates excessive use of subclassing • An object’s behavior can be modified through composition as opposed through inheritance • Allows change in object behavior at run- time 42
  • 43. Classes Should Be Open for Extension... • ...But Closed for Modification • “Come in,We’re Open” • extend the class to add new behavior • “Sorry,We’re Closed” • the code must remain closed to modification 43
  • 48. Strive for Loosely Coupled Designs... • ...Between Objects That Interact • Allows you to build flexible OO systems that can handle change • interdependency is minimized • Changes to one object won’t affect another object • Objects can be used independently 48
  • 50. A Class Should Have... • ...Only One Reason to Change • Classes can inadvertently assume too many responsibilities • interdependency is minimized • cross-cutting concerns • Assign a responsibility to one class, and only one class 50
  • 51. Local C++ User Groups • ACGNJ C++ Users Group • facilitated by Bruce Arnold • acgnj.barnold.us 51
  • 52. Local Java User Groups (1) • ACGNJ Java Users Group • facilitated by Mike Redlich • javasig.org • Princeton Java Users Group • facilitated byYakov Fain • meetup.com/NJFlex 52
  • 53. Local Java User Groups (2) • NYJavaSIG • facilitated by Frank Greco • javasig.com • PhillyJUG • facilitated by Martin Snyder, et. al. • meetup.com/PhillyJUG 53
  • 54. Local Java User Groups (3) • Capital District Java Developers Network • facilitated by Dan Patsey • cdjdn.com • currently restructuring 54
  • 57. Upcoming Events • ACGNJ Java Users Group • Dr. Venkat Subramaniam • Monday, March 19, 2018 • DorothyYoung Center for the Arts, Room 106 • Drew University • 7:30-9:00pm • “Twelve Ways to Make Code Suck Less” 57
  • 59. Upcoming Events • March 17-18, 2017 •tcf-nj.org • April 18-19, 2017 •phillyemergingtech.com 59