Anda di halaman 1dari 22

WORKSHOP SISTEM INFORMASI

ACARA 12 & 13

Oleh :

LELITA AMELIA SARI

(E31210938)

GOLONGAN B

Semester 3

D3 MANAJEMEN
INFORMATIKA JURUSAN
TEKNOLOGI INFORMASI
POLITEKNIK NEGERI JEMBER
2021/2022
I. PENDAHULUAN
- Secara sederhana, Object Interface adalah sebuah ‘kontrak’ atau perjanjian
implementasi method.Bagi class yang menggunakan object interface, class tersebut
harus mengimplementasikan ulang seluruh method yang ada di dalam interface.
Dalam pemrograman objek, penyebutan object interface sering disingkan dengan
‘Interface’ saja. Jika anda telah mempelajari abstract class, maka interface bisa
dikatakan sebagai bentuk lain dari abstract class. Walaupun secara konsep teoritis dan
tujuan penggunaannya berbeda. Sama seperti abstract class, interface juga hanya
berisi signature dari method, yakni hanya nama method dan parameternya saja (jika
ada). Isi dari method akan dibuat ulang di dalam class yang menggunakan interface.
Jika kita menganggap abstract class sebagai ‘kerangka’ atau ‘blue print’ dari class-
class lain, maka interface adalah implementasi method yang harus ‘tersedia’ dalam
sebuah objek. Interface tidak bisa disebut sebagai ‘kerangka’ class.
- Dari segi bahasa, Polimorfisme (bahasa inggris: Polymorphism) berasal dari dua kata
bahasa latin yakni poly dan morph. Poly berarti banyak, dan morph berarti bentuk.
Polimorfisme berarti banyak bentuk (wikipedia). Di dalam pemrograman objek,
polimorfisme adalah konsep dimana terdapat banyak class yang memiliki signature
method yang sama. Implementasi dari method-method tersebut diserahkan kepada
tiap class, akan tetapi cara pemanggilan method harus sama. Agar kita dapat
‘memaksakan’ signature method yang sama pada banyak class, class tersebut harus
diturunkan dari sebuah abstract class atau object interface.

II. Acara 12
a. Case 1 :
- Listing :

<?php
interface Bird{
public function makeSound();
}
class Perkutut implements Bird{
public function makeSound(){
echo "Kur Kur";
}
}
$burung = new Perkutut();
$burung->makeSound();
?>

<?php
Tag pembuka pada kode php
interface Bird{
Kode diatas merupakan kerangka kelas dari class Perkutut
public function makeSound();
}
Kode diatas merupakan fungsi dari method makeSound
public function makeSound(){
echo "Kur Kur";
}
}
Kode diatas merupakan penerapan fungsi method dan code echo digunakan
untuk menampilkan teks ke layar.
$burung = new Perkutut();
$burung->makeSound();
Kode diatas digunakan untuk membuat objek baru dari kelas perkutut dan
variabel burung memanggil ke fungsi method makeSound.
?>
Tag penutup pada php.
- Hasil Output :

b. Case 2 :
- Listing :

<?php
// Interface definition
interface Animal {
public function makeSound();
}

// Class definitions
class Cat implements Animal {
public function makeSound(){
echo " Meow ";
}
}

class Dog implements Animal {


public function makeSound(){
echo " Bark ";
}
}

class Mouse implements Animal {


public function makeSound(){
echo " Squeak ";
}
}

// Create a list of animals


$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound


foreach($animals as $animal){
$animal->makeSound();
}
?>

<?php
Tag Pembuka pada kode php.
// Interface definition
interface Animal {
Definisi dari kerangka kelas Animal.
public function makeSound();
}
Fungsi method yang membuat suara hewan dari class yang ditentukan.

// Class definitions
class Cat implements Animal {
Definisi class Cat yang implementasi dari Animal.
public function makeSound(){
echo " Meow ";
}
}
Fungsi method yang membuat suara hewan dari class Cat. ‘Echo meow’ kode
digunakan untuk menampilkan suara hewan yaitu ‘meow’ dari class Cat.
class Dog implements Animal {
Definisi class Dog yang implementasi dari Animal.
public function makeSound();
}
echo " Bark ";
}
}
Fungsi method yang membuat suara hewan dari class yang ditentukan. ‘Echo
bark’ kode digunakan untuk menampilkan suara hewan yaitu ‘bark’ dari class Dog.
class Mouse implements Animal {
public function makeSound(){
echo " Squeak ";
Definisi class Mouse yang implementasi dari Animal. Baris kedua merupakan
Fungsi method yang membuat suara hewan dari class yang ditentukan. ‘Echo squeak’
kode digunakan untuk menampilkan suara hewan yaitu ‘squeak’ dari class Mouse.
// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);
Kode diatas digunakan untuk membuat list Animal dari variabel masing –
masing class yang sudah dibuat. Dan $animals nerupakan variabel yang akan memanggil
class” yang berbeda.
// Tell the animals to make a sound
foreach($animals as $animal){
$animal->makeSound();
}
Kode diatas merupakan perulangan dari variabel animals yang disingkat
menjadi animal. Dan variabel animal tersebut memanggil dari function makeSound.
?>
Kode penutup pada php.
- Kesimpulan : Cat, Dog, dan Mouse adalah semua class yang
mengimplementasikan antarmuka Animal, yang berarti semuanya dapat
membuat suara menggunakan metode makeSound(). Karena itu, kita dapat
mengulang semua hewan dan menyuruh mereka mengeluarkan suara
meskipun kita tidak tahu jenis hewan apa masing-masing. Karena antarmuka
tidak memberi tahu kelas cara mengimplementasikan metode, setiap hewan
dapat membuat suara dengan caranya sendiri.

- Hasil Output :
c. Case 3 :
- Listing :

<?php

interface Logger {
public function log ($message);
}
class FileLogger implements Logger {
private $handle;
private $logFile;
public function __construct($filename, $mode = 'a') {
$this->logFile = $filename;
// open log file for append
$this->handle = fopen ($filename, $mode)
or die ('Could not open the log file');
}

public function log ($message) {


$message = date ('F j, Y, g:i a') . ': ' . $message . "n";
fwrite ($this->handle, $message);
}

public function __destruct() {


if ($this->handle) {
fclose ($this->handle);
}
}
}

class DatabaseLogger implements Logger {


public function log ($message) {
echo sprintf ("Log %s to the database\n", $message);
}
}

// example 1
$logger = new FileLogger ('./log.txt', 'w');
$logger->log ('PHP interface is awesome');

// example 2
$loggers = [
new FileLogger ('./log.txt'),
new DatabaseLogger()
];

foreach ($loggers as $logger) {


$logger->log('Log message');
}
?>

<?php

interface Logger {
public function log ($message);
}
Kode diatas digunakan untuk membuat antarmuka bernama Logger.
class FileLogger implements Logger {
private $handle;
private $logFile;
public function __construct($filename, $mode = 'a') {
$this->logFile = $filename;
// open log file for append
$this->handle = fopen ($filename, $mode)
or die ('Could not open the log file');
}

public function log ($message) {


$message = date ('F j, Y, g:i a') . ': ' . $message . "n";
fwrite ($this->handle, $message);
}

public function __destruct() {


if ($this->handle) {
fclose ($this->handle);
}
}
}
Kode diatas digunakan untuk membuat kelas FileLogger yang menulis pesan log ke
file.
class DatabaseLogger implements Logger {
public function log ($message) {
echo sprintf ("Log %s to the database\n", $message);
}
}
Berikut ini menambahkan logger lain yang mencatat informasi ke database. Untuk
tujuan demonstrasi, kami membuat kelas DatabaseLogger sesederhana mungkin.
// example 1
$logger = new FileLogger ('./log.txt', 'w');
$logger->log ('PHP interface is awesome');
Kode diatas digunakan untuk mengoperasikan kelas FileLogger.
// example 2
$loggers = [
new FileLogger ('./log.txt'),
new DatabaseLogger()
];

foreach ($loggers as $logger) {


$logger->log('Log message');
}
Kode diatas digunakan untuk menambahkan jenis logger lain yang
mengimplementasikan antarmuka Logger tanpa menyentuh logger yang ada. Cuplikan kode
berikut menunjukkan cara menggunakan beberapa pencatat data secara bersamaan
menggunakan antarmuka ILogger tunggal.
- Hasil Output :

d. Tugas :
1. Buatlah interface yang bernama hitungLuas dengan property bernama ‘sisi’
dan berisi 3 methods yaitu fungsi hitungLuasPersegi(), hitungLuasSegitiga()
dan hitungLuasLingkaran().
2. Buatlah 3 class untuk menghitung luasbangun datar yang
mengimplementasikan interface tersebut.
3. Buatlah object dari masing-masing class, kemudian jalankan dan amati
hasilnya.

- Listing :

<?php

abstract class BangunDatar {


abstract function luas();

/**
* Menghitung bangun datar Persegi
*
* @param $sisi
*
*/
class Persegi extends BangunDatar{
private float $sisi;

function __construct($sisi){
$this->sisi = $sisi;
}
function luas(){
echo "Luas ". get_class(). " : ". ($this->sisi * $this->sisi). "\n";
}
}

/**
* Menghitung bangun datar Lingkaran
*
* @param $jari2
*
*/
class Lingkaran extends BangunDatar {
private float $jari2;
function __construct($jari2){
$this->jari2 = $jari2;
}
function luas(){
echo "Luas ". get_class(). " : ". (pi() * pow($this->jari2,2)). "\n";
}
}

/**
* Menghitung bangun datar segitiga
*
* @param $alas
* @param $tinggi
*
*/
class Segitiga extends BangunDatar {
private float $tinggi;
private float $alas;
function __construct($alas,$tinggi){
$this->alas = $alas;
$this->tinggi = $tinggi;
}
function luas(){
echo "Luas ". get_class(). " : ". (($this->alas * $this->tinggi) *
.5). "\n";
}

}
// alas = 4
// tinggi = 5
$segitiga = new Segitiga(10,10);

// jari jari = 10
$lingkaran = new Lingkaran(10);

// sisi = 10
$persegi = new Persegi(10);

$segitiga->luas();
$lingkaran->luas();
$persegi->luas();

?>

<?php

abstract class BangunDatar {


abstract function luas();

}
Abstract class adalah class yang mengandung minimal satu buah abstract method,
yaitu method yang hanya berupa nama method dan argumennya (jika ada) dan diawali dengan
keyword abstract. Kode diatas merupakan penerapan abstract class yang diberi nama BangunDatar
dan Penerapan abstract method luas.
class Persegi extends BangunDatar{
private float $sisi;
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) dari class
BangunDatar. ‘private float $sisi’ digunakan untuk menyembunyikan nilai dari property sisi.
function __construct($sisi){
Sebuah function yang otomatis dijalankan ketika class diakses dan memanggil model
dan menyimpan nilai dari variabel $sisi.
$this->sisi = $sisi;
}
Digunakan untuk memanggil variabel $sisi.
function luas(){
Definisi fungsi dari luas.
echo "Luas ". get_class(). " : ". ($this->sisi * $this->sisi). "\n";
}
}
Untuk menampilkan luas dari class persegi dengan rumus variabel sisi x sisi.
class Lingkaran extends BangunDatar {
private float $jari2;
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) dari class
BangunDatar. ‘private float $jari2’ digunakan untuk menyembunyikan nilai dari property jari2.
function __construct($jari2){
Sebuah function yang otomatis dijalankan ketika class diakses dan memanggil model
dan menyimpan nilai dari variabel $jari2.
$this->jari2 = $jari2;
}
Digunakan untuk memanggil variabel $jari2.
function luas(){
Definisi fungsi dari luas.
echo "Luas ". get_class(). " : ". (pi() * pow($this->jari2,2)). "\n";
}
}
Untuk menampilkan luas dari class lingkaran dengan rumus variabel jari2.
class Segitiga extends BangunDatar {
private float $tinggi;
private float $alas;
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) dari class
BangunDatar. ‘private float $tinggi dan $alas’ digunakan untuk menyembunyikan nilai dari property
tinggi dan alas.
unction __construct($alas,$tinggi){
$this->alas = $alas;
$this->tinggi = $tinggi;
}
Sebuah function yang otomatis dijalankan ketika class diakses dan memanggil model
dan menyimpan nilai dari variabel $alas dan $tinggi. Baris 2-3 Digunakan untuk memanggil variabel
$alas dan $tinggi.
function luas(){
echo "Luas ". get_class(). " : ". (($this->alas * $this->tinggi) *
.5). "\n";
}

}
Definisi fungsi dari luas. Untuk menampilkan luas dari class segitiga dengan rumus
variabel alas x tinggi.

$segitiga = new Segitiga(10,10);

// jari jari = 10
$lingkaran = new Lingkaran(10);

// sisi = 10
$persegi = new Persegi(10);

Sebuah definisi dari variabel segitiga, lingkaran, dan persegi yang membuat objek
dari masing” variabel.

$segitiga->luas();
$lingkaran->luas();
$persegi->luas();

?>
Definisi variabel masing” child class yang memanggil luas dari child class.
- Hasil Output :

III. Acara 13
a. Case 1 :
- Listing :

<?php

//membuat interface Tanah


interface Tanah{
public function hitungLuas();
}

//membuat abstract class Bibit

abstract class Bibit{


abstract public function ditanami();
}

//extends Bibit dan implements Tanah


class Lingkaran extends Bibit implements Tanah{
private $jariJari;
private $pi = 3.14;

public function __construct($jariJari){


$this->jariJari = $jariJari;
}

//menghitung luas tanah berbentuk lingkaran


//implements method dari interface tanah
public function hitungLuas(){
return $this->jariJari * $this->jariJari * $this->pi;
}

//tanah ditanami Kopi


//extends method dari abstract class Bibit
public function ditanami(){
return "ditanami Kopi";
}
}

class persegiPanjang extends Bibit implements Tanah{


private $panjang;
private $lebar;

public function __construct($panjang, $lebar){


$this->panjang = $panjang;
$this->lebar = $lebar;
}

//menghitung luas tanah berbentuk persegi panjang


//implements method dari interface tanah
public function hitungLuas(){
return $this->panjang * $this->lebar;
}

//tanah ditanami Padi


//extends method dari abstract class bibit
public function ditanami(){
return "ditanami Padi";
}
}
$tanahAgus = new Lingkaran(3);
$tanahChandra = new PersegiPanjang(3,4);

echo "Tanah Agus seluas" . $tanahAgus->hitungLuas() . "m2 \n";


echo $tanahAgus->ditanami() . "\n";

?>

- Pembahasan : Dalam contoh di atas terdapat dua class yaitu class Lingkaran dan class
PersegiPanjang. Dua class tersebut sama-sama turunan dari abstract class Bibit dan
implementasi interface Tanah. Walaupun dari abstract class dan interface yang sama
tapi class Lingkaran dan class PersegiPanjang memiliki fungsi yang berbeda. Class
Lingkaran untuk menghitung luas tanah lingkaran dan ditanami kopi, sedangkan class
PersegiPanjang untuk menghitung luas tanah persegi panjang dan ditanami padi.
- Hasil Output :

b. Berdasarkan diagram dibawah ini buatlah sebuah contoh polymorphism.Dimana


Person adalah abstract class yang memiliki abstract fungsi, masing –
masing fungsi great mencetak nilai yang berbeda.
- Listing :

<?php
interface Greeting {
public function languange();
}

abstract class Person {


abstract public function greet();
}

class English extends Person implements Greeting {

public function languange() {


return "English : ";
}

public function greet() {


return "Good Morning!";
}
}

class German extends Person implements Greeting {

public function languange() {


return "German : ";
}

public function greet() {


return "Guten Morgen!";
}
}

class French extends Person implements Greeting {

public function languange() {


return "French : ";
}

public function greet() {


return "Bonjour!";
}
}

$english = new English();


$german = new German();
$french = new French();

function languange($lang){
return $lang->languange();
}

function greet($greet){
return $greet->greet();
}

echo languange($english);
echo greet($english) . "<br>";
echo languange($german);
echo greet($german) . "<br>";
echo languange($french);
echo greet($french);
?>

<?php
interface Greeting {
public function languange();
}
Kode diatas digunakan untuk membuat antarmuka bernama greeting.
abstract class Person {
abstract public function greet();
}
Abstract class adalah class yang mengandung minimal satu buah abstract method,
yaitu method yang hanya berupa nama method dan argumennya (jika ada) dan diawali dengan
keyword abstract. Kode diatas merupakan penerapan abstract class yang diberi nama Person dan
Penerapan abstract method greet.
class English extends Person implements Greeting {
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu
English dari class Person dengan implementasi dari greeting.
public function languange() {
return "English : ";
}
Definisi fungsi method language. Baris kedua merupakan definisi mengembalikan
nilai yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
bahasa English.
public function greet() {
return "Good Morning!";
}
}
Definisi fungsi method greet. Baris kedua merupakan definisi mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
ucapan Good Morning.
class German extends Person implements Greeting {
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu
German dari class Person dengan implementasi dari greeting.
public function languange() {
return "German : ";
}
Definisi fungsi method greet. Baris kedua merupakan definisi mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
bahasa German.
public function greet() {
return "Guten Morgen!";
}
}
Definisi fungsi method greet. Baris kedua merupakan definisi mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
ucapan Guten Morgen.
class French extends Person implements Greeting {
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu
French dari class Person dengan implementasi dari greeting.
public function languange() {
return "French : ";
}
Definisi fungsi method greet. Baris kedua merupakan definisi mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
bahasa French.
public function greet() {
return "Bonjour!";
}
}
Definisi fungsi method greet. Baris kedua merupakan definisi mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut yaitu
ucapan Bonjour.
$english = new English();
$german = new German();
$french = new French();
Merupakan definisi variabel dari masing” child class english,german dan french.
function languange($lang){
return $lang->languange();
}
Merupakan fungsi method language atau variabel language dan untuk
mengembalikan nilai yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil
function tersebut.
function greet($greet){
return $greet->greet();
}
Merupakan fungsi method greet atau variabel greet dan untuk mengembalikan nilai
yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut.
echo languange($english);
echo greet($english) . "<br>";
echo languange($german);
echo greet($german) . "<br>";
echo languange($french);
echo greet($french);
?>
Kode yang digunakan untuk menampilkan teks variabel dari class language dan greet.
- Hasil Output :
c. Buatlah sebuah contoh lain polymorphism dimana didalamnya terdapat minimal 1
abstract class, 1 interface dan 3 class lain yang merupakan extends dari class abstract
atau interface.
- Listing :

<?php
// membuat abstract class
abstract class komputer{
// membuat abstract method
abstract public function booting_os();
}

interface mouse{
public function double_klik();
}

class laptop extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi Laptop";
}
public function double_klik(){
return "Double Klik Mouse Laptop";
}
}

class pc extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi PC";
}
public function double_klik(){
return "Double Klik Mouse PC";
}
}

class chromebook extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi Chromebook";
}
public function double_klik(){
return "Double Klik Mouse Chromebook";
}
}

// membuat objek dari class diatas


$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();

// membuat fungsi untuk memproses objek


function booting_os_komputer($objek_komputer){
return $objek_komputer->booting_os();
}

function double_klik_komputer($objek_komputer){
return $objek_komputer->double_klik();
}

// menjalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo double_klik_komputer($laptop_baru);
echo "<br />";
echo "<br />";

echo booting_os_komputer($pc_baru);
echo "<br />";
echo double_klik_komputer($pc_baru);
echo "<br />";
echo "<br />";

echo booting_os_komputer($chromebook_baru);
echo "<br />";
echo double_klik_komputer($chromebook_baru);
?>

<?php
// membuat abstract class
abstract class komputer{
// membuat abstract method
abstract public function booting_os();
}

Kode yang digunakan untuk membuat abctract class komputer dan abstract method
booting_os.
interface mouse{
public function double_klik();
}
Kode diatas digunakan untuk membuat antarmuka bernama mouse dan membuat
fungsi method double_klik.
class laptop extends komputer implements mouse{
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu
laptop dari class komputer dengan implementasi dari mouse.
public function booting_os(){
return "Proses Booting Sistem Operasi Laptop";
}
Merupakan fungsi method booting_os dan untuk mengembalikan nilai yang
tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut.
public function double_klik(){
return "Double Klik Mouse Laptop";
}
}
Merupakan fungsi method double_klik dan untuk mengembalikan nilai yang
tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut.
class pc extends komputer implements mouse{
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu pc
dari class komputer dengan implementasi dari mouse.
public function booting_os(){
return "Proses Booting Sistem Operasi PC";
}
public function double_klik(){
return "Double Klik Mouse PC";
}
}
Merupakan fungsi method booting_os dan double_klik dan untuk mengembalikan
nilai yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut.
class chromebook extends komputer implements mouse{
Kode diatas digunakan untuk membuat child class yang mewarisi (inherit) yaitu
chromebook dari class komputer dengan implementasi dari mouse.
public function booting_os(){
return "Proses Booting Sistem Operasi Chromebook";
}
public function double_klik(){
return "Double Klik Mouse Chromebook";
}
}
Merupakan fungsi method booting_os dan double_klik dan untuk mengembalikan
nilai yang tersimpan dalam sebuah variabel kepada kode yang akan memanggil function tersebut.
// membuat objek dari class diatas
$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();
Digunakan untuk membuat objek dari masing” class diatas.
// membuat fungsi untuk memproses objek
function booting_os_komputer($objek_komputer){
return $objek_komputer->booting_os();
}
function double_klik_komputer($objek_komputer){
return $objek_komputer->double_klik();
}
Digunakan untuk membuat fungsi yang memproses objek.
// menjalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo double_klik_komputer($laptop_baru);
echo "<br />";
echo "<br />";
echo booting_os_komputer($pc_baru);
echo "<br />";
echo double_klik_komputer($pc_baru);
echo "<br />";
echo "<br />";

echo booting_os_komputer($chromebook_baru);
echo "<br />";
echo double_klik_komputer($chromebook_baru);
?>
Digunakan untuk menampilkan fungsi method dan variabel masing – masing.
- Hasil Output :

IV. REFERENSI
BKPM Interface dan Polimorfisme

Anda mungkin juga menyukai