demystifying object-oriented programming - zendcon 2016

49
Demystifying Object-Oriented Programming Download Files: https://github.com/sketchings/oop-basics https://joind.in/talk/153b4

Upload: alena-holligan

Post on 12-Jan-2017

209 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Demystifying Object-Oriented Programming - ZendCon 2016

DemystifyingObject-Oriented Programming

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

https://joind.in/talk/153b4

Page 2: Demystifying Object-Oriented Programming - ZendCon 2016

Presented by: Alena Holligan• Wife and Mother of 3 young children

• PHP Teacher at Treehouse

• Group Leader (PHPDX, Women Who Code Portland)

www.sketchings.com@[email protected]

Page 3: Demystifying Object-Oriented Programming - ZendCon 2016

Terminologythe single most important part

Page 4: Demystifying Object-Oriented Programming - ZendCon 2016

PART 1: TermsClass (properties, methods)

Object

Instance

Abstraction

Encapsulation

Page 5: Demystifying Object-Oriented Programming - ZendCon 2016

PART 2: PolymorphismInheritance

Interface

Abstract Class

Traits

Page 6: Demystifying Object-Oriented Programming - ZendCon 2016

Part 3: ADDED FEATURESNamespaces

Type Declarations

Static Methods

Magic Methods

Magic Constants

Page 7: Demystifying Object-Oriented Programming - ZendCon 2016

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 8: Demystifying Object-Oriented Programming - ZendCon 2016

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 9: Demystifying Object-Oriented Programming - ZendCon 2016

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 10: Demystifying Object-Oriented Programming - ZendCon 2016

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

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

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

Page 11: Demystifying Object-Oriented Programming - ZendCon 2016

Abstraction

Managing the complexity of the system

Dealing with ideas rather than events

This is the class architecture itself.

Use something without knowing inner workings

Page 12: Demystifying Object-Oriented Programming - ZendCon 2016

Encapsulation

Binds together the data and functions that manipulate the data, and keeps both safe from outside interference and misuse.

Properties

Methods

Page 13: Demystifying Object-Oriented Programming - ZendCon 2016

ScopeControls 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 14: Demystifying Object-Oriented Programming - ZendCon 2016

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 15: Demystifying Object-Oriented Programming - ZendCon 2016

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 16: Demystifying Object-Oriented Programming - ZendCon 2016

Team-upoop is great for working in groups

Page 17: Demystifying Object-Oriented Programming - ZendCon 2016

Challenges

1. Create a new class with properties and methods

2. Instantiate a new user with a different name and title

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

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

Page 18: Demystifying Object-Oriented Programming - ZendCon 2016

PART 2: PolymorphismD-R-YSharing Code

Page 19: Demystifying Object-Oriented Programming - ZendCon 2016

pol·y·mor·phism /ˌpälēˈmôrfizəm/The condition of occurring in several different forms

BIOLOGY

GENETICS

BIOCHEMISTRY

COMPUTING

Page 20: Demystifying Object-Oriented Programming - ZendCon 2016

TermsPolymorphism

Inheritance

Interface

Abstract Class

Traits

Page 21: Demystifying Object-Oriented Programming - ZendCon 2016

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 22: Demystifying Object-Oriented Programming - ZendCon 2016

Creating a child class

class Developer extends User { public $skills = array(); //additional property

public function getSalutation() {//override method return $this->title . " " . $this->name. ", Developer"; } public function getSkillsString(){ //additional method return implode(", ",$this->skills); } }

Page 23: Demystifying Object-Oriented Programming - ZendCon 2016

Using a child class

$developer = new Developer(); $developer->setName(”Jane Smith”); $developer->setTitle(“Ms”);

echo $developer->getFormatedSalutation();echo "<br />”;

$developer->skills = array("JavasScript", "HTML", "CSS");$developer->skills[] = “PHP";

echo $developer->getSkillsString();

Page 24: Demystifying Object-Oriented Programming - ZendCon 2016

When run, the script returns:

Ms Jane Smith, Developer

JavasScript, HTML, CSS, PHP

Page 25: Demystifying Object-Oriented Programming - ZendCon 2016

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 26: Demystifying Object-Oriented Programming - ZendCon 2016

interface UserInterface {

public function getFormattedSalutation();

public function getName();

public function setName($name);

public function getTitle();

public function setTitle($title);

}

class User implements UserInterface { … }

Page 27: Demystifying Object-Oriented Programming - ZendCon 2016

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 28: Demystifying Object-Oriented Programming - ZendCon 2016

abstract class User { //class

public $name; //property

public getName() { //method echo $this->name; }

abstract public function setName($name); //abstract method}

class Developer extends User { public setName($name) { //implementing the method …

Page 29: Demystifying Object-Oriented Programming - ZendCon 2016

Traits

Composition

Horizontal Code Reuse

Multiple traits can be implemented

Page 30: Demystifying Object-Oriented Programming - ZendCon 2016

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

Page 31: Demystifying Object-Oriented Programming - ZendCon 2016

Using Traitsclass Developer extends User { use Toolkit; ... }

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

Page 32: Demystifying Object-Oriented Programming - ZendCon 2016

When run, the script returns:

Ms Jane Smith

Spoon, Fork, Knife

Page 33: Demystifying Object-Oriented Programming - ZendCon 2016

Challenges1. Change to User class to an abstract class.

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

3. Add an Interface for the Developer Class (or your own class)

4. Add a trait to the User

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

Page 34: Demystifying Object-Oriented Programming - ZendCon 2016

Part 3: Added FeaturesNamespaces

Type Declarations

Magic Methods

Magic Constants

Static Methods

Page 35: Demystifying Object-Oriented Programming - ZendCon 2016

NamespacesPrevent Code Collision

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 36: Demystifying Object-Oriented Programming - ZendCon 2016

NamespacesMust 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 37: Demystifying Object-Oriented Programming - ZendCon 2016

namespace myUser;

class User { //class

public $name; //property

public getName() { //method

echo $this->name;

}

public function setName($name);

}

class Developer extends \myUser\User { … }

Page 38: Demystifying Object-Oriented Programming - ZendCon 2016

Available Type DeclarationsPHP 5.4

Class/Interface,

self, array,

callable

PHP 7

bool

float

int

string

Page 39: Demystifying Object-Oriented Programming - ZendCon 2016

Type Declarationsclass Conference { public $title; private $attendees = array(); public function addAttendee(User $person) { $this->attendees[] = $person; } public function getAttendees(): array { foreach($this->attendees as $person) { $attendee_list[] = $person; } return $attendee_list; } }

Page 40: Demystifying Object-Oriented Programming - ZendCon 2016

Using Type Declarations

$zendcon = new Conference(); $zendcon->title = ”ZendCon 2016”; $zendcon->addAttendee($user); echo implode(", “, $zendcon->getAttendees());

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

Ms Jane Smith

Page 41: Demystifying Object-Oriented Programming - ZendCon 2016

Magic Methods

Setup just like any other method

The Magic comes from the fact that they are triggered and not called

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

Page 42: Demystifying Object-Oriented Programming - ZendCon 2016

Magic Constants

Predefined functions in PHP

For more see http://php.net/manual/en/language.constants.predefined.php

Page 43: Demystifying Object-Oriented Programming - ZendCon 2016

Magic Methods and Constantsclass User { protected $name; protected $title; public function __construct($name, $title) { $this->name = $name; $this->title = $title; } public function __toString() { return __CLASS__. “: “ . $this->getFormattedSalutation(); } ... }

Page 44: Demystifying Object-Oriented Programming - ZendCon 2016

Creating / Using the Magic Method$user = new User("Jane Smith","Ms"); echo $user;

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

User: Ms Jane Smith

Page 45: Demystifying Object-Oriented Programming - ZendCon 2016

Adding a Static Methodsclass User { public $encouragements = array( “You are beautiful!”, “You have this!”, public static function encourage() { $int = rand(count($this->encouragements)); return $this->encouragements[$int]; } ... }

Page 46: Demystifying Object-Oriented Programming - ZendCon 2016

Using the Static Methodecho User::encourage();

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

You have this!

Page 47: Demystifying Object-Oriented Programming - ZendCon 2016

Challenges1. Define 2 “User” classes. Use both classes in one file using

namespacing

2. Try defining types AND try accepting/returning the wrong types

3. Try another Magic Method http://php.net/manual/en/language.oop5.magic.php

4. Add Magic Constants http://php.net/manual/en/language.constants.predefined.php

5. Add and use a Static Method

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

Page 48: Demystifying Object-Oriented Programming - ZendCon 2016

Resources

LeanPub: The Essentials of Object Oriented PHP

Head First Object-Oriented Analysis and Design

Page 49: Demystifying Object-Oriented Programming - ZendCon 2016

Presented by: Alena Holligan• Wife and Mother of 3 young children

• PHP Teacher at Treehouse

• Group Leader (PHPDX, Women Who Code Portland)

www.sketchings.com @[email protected]

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

https://joind.in/talk/153b4