demystifying object-oriented programming - midwest php

35
DEMYSTIFYING OBJECT-ORIENTED PROGRAMMING MAKING SENSE OF ALL THE MUMBO JUMBO HTTPS://GITHUB.COM/SKETCHINGS/OOP-BASICS

Upload: alena-holligan

Post on 26-Jan-2017

259 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Demystifying Object-Oriented Programming - Midwest PHP

DEMYSTIFYING OBJECT-ORIENTED PROGRAMMINGMAKING SENSE OF ALL THE MUMBO JUMBO

HTTPS://GITHUB.COM/SKETCHINGS/OOP-BASICS

Page 2: Demystifying Object-Oriented Programming - Midwest PHP

TERMINOLOGYTHE SINGLE MOST IMPORTANT PART

Page 3: Demystifying Object-Oriented Programming - Midwest PHP

TERMS

• Class (properties, methods)

• Object

• Instance

• Abstraction

• Encapsulation

Page 4: Demystifying Object-Oriented Programming - Midwest PHP

TERMS CONTINUED

• Polymorphism

• Inheritance

• Interface

• Abstract Class

• Traits

• Namespaces

Page 5: Demystifying Object-Oriented Programming - Midwest PHP

CLASS

• A template/blueprint that facilitates creation of objects. A set of program statements to do a certain task. Usually represents a noun, such as a person, place or thing.

• Includes properties and methods — which are class functions

Page 6: Demystifying Object-Oriented Programming - Midwest PHP

OBJECT

• Instance of a class.

• In the real world object is a material thing that can be seen and touched.

• In OOP, object is a self-contained entity that consists of both data and procedures.

Page 7: Demystifying Object-Oriented Programming - Midwest PHP

INSTANCE

• Single occurrence/copy of an object

• There might be one or several objects, but an instance is a specific copy, to which you can have a reference

Page 8: Demystifying Object-Oriented Programming - Midwest PHP

class User { //class private $name; //property public getName() { //method echo $this->name; }}

$user1 = new User(); //first instance of object

$user2 = new User(); //second instance of object

Page 9: Demystifying Object-Oriented Programming - Midwest PHP

ABSTRACTION

• “An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of object and thus provide crisply defined conceptual boundaries, relative to the perspective of the viewer.”— G. Booch

• This is the class architecture itself.

• Use something without knowing exactly how it works

Page 10: Demystifying Object-Oriented Programming - Midwest PHP

ENCAPSULATION

• Scope. Controls who can access what. Restricting access to some of the object’s components (properties and methods), preventing unauthorized access.

• Public - everyone

• Protected - inherited classes

• Private - class itself, not children

Page 11: Demystifying Object-Oriented Programming - Midwest PHP

class User { protected $name; protected $title; public function getFormattedSalutation() { return $this->getSalutation(); } protected function getSalutation() { return $this->title . " " . $this->name; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getTitle() { return $this->title; } public function setTitle($title) { $this->title = $title; } }

Page 12: Demystifying Object-Oriented Programming - Midwest PHP

CREATING / USING THE OBJECT INSTANCE

$user = new User(); $user->setName("Jane Smith"); $user->setTitle("Ms"); echo $user->getFormattedSalutation();

When the script is run, it will return:

Ms Jane Smith

Page 13: Demystifying Object-Oriented Programming - Midwest PHP

CONSTRUCTOR METHOD & MAGIC METHODSclass User { protected $name; protected $title; public function __construct($name, $title) { $this->name = $name; $this->title = $title; } public function __toString() { return $this->getFormattedSalutation(); } ... }

For more see http://php.net/manual/en/language.oop5.magic.php

Page 14: Demystifying Object-Oriented Programming - Midwest PHP

CREATING / USING THE OBJECT INSTANCE

$user = new User("Jane Smith","Ms"); echo $user;

When the script is run, it will return the same result as before:

Ms Jane Smith

Page 15: Demystifying Object-Oriented Programming - Midwest PHP

POLYMORPHISMDRY and Sharing Code

Page 16: Demystifying Object-Oriented Programming - Midwest PHP

INHERITANCE: PASSES KNOWLEDGE DOWN

• Subclass, parent and a child relationship, allows for reusability, extensibility.

• Additional code to an existing class without modifying it. Uses keyword “extends”

• NUTSHELL: create a new class based on an existing class with more data, create new objects based on this class

Page 17: Demystifying Object-Oriented Programming - Midwest PHP

CREATING AND USING A CHILD CLASSclass Developer extends User { public $skills = array(); public function getSalutation() { return $this->title . " " . $this->name. ", Developer"; } public function getSkillsString() { echo implode(", ",$this->skills); } }

$developer = new Developer("Jane Smith", "Ms"); echo $developer; echo "<br />"; $developer->skills = array("JavasScript", "HTML", "CSS"); $developer->skills[] = "PHP"; $developer->getSkillsString();

Page 18: Demystifying Object-Oriented Programming - Midwest PHP

WHEN RUN, THE SCRIPT RETURNS:

Ms Jane Smith, Developer

JavasScript, HTML, CSS, PHP

Page 19: Demystifying Object-Oriented Programming - Midwest PHP

INTERFACE

• Interface, specifies which methods a class must implement.

• All methods in interface must be public.

• Multiple interfaces can be implemented by using comma separation

• Interface may contain a CONSTANT, but may not be overridden by implementing class

Page 20: Demystifying Object-Oriented Programming - Midwest PHP

interface UserInterface {

public function getFormattedSalutation();

public function getName();

public function setName($name);

public function getTitle();

public function setTitle($title);

}

class User implements UserInterface { … }

Page 21: Demystifying Object-Oriented Programming - Midwest PHP

ABSTRACT CLASS

An abstract class is a mix between an interface and a class. It can define functionality as well as interface.

Classes extending an abstract class must implement all of the abstract methods defined in the abstract class.

Page 22: Demystifying Object-Oriented Programming - Midwest PHP

abstract class User { //class

public $name; //property

public getName() { //method

echo $this->name;

}

abstract public function setName($name);

}

class Developer extends User { … }

Page 23: Demystifying Object-Oriented Programming - Midwest PHP

COMPOSITIONHorizontal Code Reuse

Page 24: Demystifying Object-Oriented Programming - Midwest PHP

TRAITS

• Multiple traits can be implemented

Page 25: Demystifying Object-Oriented Programming - Midwest PHP

CREATING TRAITS

trait Toolkit { public $tools = array(); public function setTools($task) { switch { case “eat": $this->tools[] = ("Spoon", "Fork", "Knife"); exit; ... } } public function showTools() { echo implode(", ",$this->skills); } }

Page 26: Demystifying Object-Oriented Programming - Midwest PHP

USING TRAITS

class Developer extends User { use Toolkit; ... }

$developer = new Developer("Jane Smith", "Ms"); echo $developer; echo "<br />"; $developer->setTools("Eat"); echo $developer->showTools();

Page 27: Demystifying Object-Oriented Programming - Midwest PHP

WHEN RUN, THE SCRIPT RETURNS:

Ms Jane Smith

Spoon, Fork, Knife

Page 28: Demystifying Object-Oriented Programming - Midwest PHP

NAMESPACESPrevent Code Collision

Page 29: Demystifying Object-Oriented Programming - Midwest PHP

NAMESPACES

• Help create a new layer of code encapsulation

• Keep properties from colliding between areas of your code

• Only classes, interfaces, functions and constants are affected

• Anything that does not have a namespace is considered in the Global namespace (namespace = "")

Page 30: Demystifying Object-Oriented Programming - Midwest PHP

NAMESPACES

• Must be declared first (except 'declare)

• Can define multiple in the same file

• You can define that something be used in the "Global" namespace by enclosing a non-labeled namespace in {} brackets.

• Use namespaces from within other namespaces, along with aliasing

Page 31: Demystifying Object-Oriented Programming - Midwest PHP

• namespace myUser;

• class User { //class

• public $name; //property

• public getName() { //method

• echo $this->name;

• }

• public function setName($name);

• }

• class Developer extends \myUser\User { … }

Page 32: Demystifying Object-Oriented Programming - Midwest PHP

EXPLANATION COMPLETEQUESTION AND ANSWER TIME

Page 33: Demystifying Object-Oriented Programming - Midwest PHP

ALENA HOLLIGAN

@sketchingssketchings.com

Wife and Mother of 3 young children PHP Teacher at Treehouse PHP Users Group LeaderWomen Who Code Leader

https://joind.in/talk/6b753

Page 34: Demystifying Object-Oriented Programming - Midwest PHP

CHALLENGES

1. Change to User class to an abstract class.

2. Throw an error because your access is too restricted.

3. Extend the User class for another type of user, such as our Developer example

4. Define 2 “User” classes in one file using namespacing

https://github.com/sketchings/oop-basics

Page 35: Demystifying Object-Oriented Programming - Midwest PHP

RESOURCES

• LeanPub: The Essentials of Object Oriented PHP

• Head First Object-Oriented Analysis and Design