Belajar Santai OOP PHP - Leanpub

2y ago
43 Views
9 Downloads
690.82 KB
44 Pages
Last View : 11d ago
Last Download : 2m ago
Upload by : Kairi Hasson
Transcription

Belajar Santai OOP PHPMemahami Konsep OOP dengan Cara yangMudahMuhamad Surya IksanudinBuku ini dijual di http://leanpub.com/belajar-santai-oop-phpVersi ini diterbitkan pada 2016-07-29This is a Leanpub book. Leanpub empowers authors andpublishers with the Lean Publishing process. Lean Publishing isthe act of publishing an in-progress ebook using lightweight toolsand many iterations to get reader feedback, pivot until you havethe right book and build traction once you do. 2016 Muhamad Surya Iksanudin

ContentsDaftar Bab yang dibahas . . . . . . . . . . . . . . . . . . .1Pengertian Object Oriented Programming . . . . . . . . .I. Apa itu OOP . . . . . . . . . . . . . . . . . . . . . . .II. Kelebihan OOP dibandingkan procedural . . . . . . .III. Bahasa yang mendukung konsep Pemrograman berbasis objek . . . . . . . . . . . . . . . . . . . . . . .333Class dan Object . . . . . . . . . . . . . . . . . . . . . . .I. Pengertian Class . . . . . . . . . . . . . . . . . . . . .II. Contoh Class . . . . . . . . . . . . . . . . . . . . . .666Keyword this dan selfI. Pengantar . . . . .II. Keyword this . .III. Keyword self . .10101013Namespace, Use dan As . . . . . . . . . . . . . . . . . . . . .1414141820Anonymous Function dan Anonymous Class . . . . . . .I. Pengantar . . . . . . . . . . . . . . . . . . . . . . . .II. Anonymous Function . . . . . . . . . . . . . . . . . .242424I. Pengantar .II. Namespace .III. Use . . . .IV. As . . . . .4.

CONTENTSIII. Anonymous Class . . . . . . . . . . . . . . . . . . .Membuat Framework Sederhana . .I. Pengantar . . . . . . . . . . . .II. Http Request dan Http ResponseIII. Framework Dependencies . . .IV. Membuat Kernel Framework .V. Routing . . . . . . . . . . . . .VI. Front Controller . . . . . . . .VII. Event Dispatcher . . . . . . .VIII. Kesimpulan . . . . . . . . .27323232333537384040

Daftar Bab yang ab-XXI-Design-pattern.txt1

Daftar Bab yang XV-Membuat-framework-sederhana.txt2

Pengertian Object OrientedProgrammingI. Apa itu OOPPemrograman berbasis object (OOP)¹ adalah sebuah paradigmapemrograman yang berorientasikan kepada object. Semua data danfungsi dalam paradigma ini dibungkus dengan class-class atauobject-object.Dalam pemrograman berbasis objek, kita diminta untuk memahamisebuah masalah dan memodelkan masalah tersebut menjadi sebuahclass dan kemudian class akan diinstansiasi menjadi sebuah objectpada saat runtime.Setiap class/object dalam pemrograman berbasis object dapat salingberinteraksi dan berkomunikasi satu sama lain untuk mendukungsebuah solusi dari suatu masalah.II. Kelebihan OOP dibandingkanproceduralKelebihan OOP dibandingkan dengan procedural antara lain: Lebih terstruktur dan mudah dibaca. Class-Class dapat digunakan kembali pada projectyang lain n berorientasi objek3

Pengertian Object Oriented Programming4 Pemetaan masalah jadi lebih mudah sehinggamudah untuk membuat solusinya. Pembatasan akses terhadap suatu fungsi dapatmeningkatkan keamaan code. Interaksi antara code lebih terasa.Satu untuk semuaKarena pemrograman berbasis objek adalah sebuahkonsep.Jika Anda menguasainya, Anda dapat menguasaibahasa pemrograman lain yang mendukung OOPdengan mudah.III. Bahasa yang mendukung konsepPemrograman berbasis objekBila Anda menguasai OOP, maka Anda akan lebih mudah mempelajari bahasa pemrograman yang mendukung OOP. Adapunbahasa pemrograman yang mendukung OOP antara lain: PHP Java C Python

Pengertian Object Oriented Programming .Net Ruby GoDan masih banyak lagi.5

Class dan ObjectI. Pengertian ClassSecara gampang, class adalah sebuah model/cetakan sedangkanobject adalah realisasinya. Dalam OOP, Class memiliki propertydan method. Property adalah sesuatu yang dimiliki oleh class,sedangkan method adalah apa-apa saja yang bisa dilakukan olehclass.Bila diibaratkan dengan Mobil, maka property adalah roda, kursi,pintu, dan lain sebagainya. Sedangkan method adalah maju, mundur,berbelok, mengerem dan lain sebagainya.II. Contoh ClassSetelah kita memahami pengertian dari class, tidak lengkap rasanyakalau tidak ada contoh penggunaannya. Contoh dibawah ini akanmemberikan gambaran lebih dalam tentang class.1234567891011 ?php//Classclass Mobil{//Propertyprivate jumlahRoda;//Propertyprivate jumlahKursi;6

Class dan 3435367//Methodpublic function setJumlahRoda( jumlahRoda){ this- jumlahRoda jumlahRoda;}//Methodpublic function setJumlahKursi( jumlahKursi){ this- jumlahKursi jumlahKursi;}//Methodpublic function cetak(){echo 'Mobil punya '. this- jumlahRoda.' roda da\n '. this- jumlahKursi.' kursi.';}} sedan new Mobil();//Object sedan- setJumlahRoda(4); sedan- setJumlahKursi(4); sedan- cetak();echo PHP EOL;Pada contoh diatas, class Mobil adalah sebuah prototype/modelsedangkan sedan adalah realisasinya.Sementara jumlahRoda dan jumlahKursi adalah property.Sedangkan setJumlahRoda( jumlahRoda) sampai pada cetak() dinamakan method (akan dijelaskan secara khusus pada bab tersendiri).Bila program diatas dijalankan, maka output-nya akan tampaksebagai berikut:

8Class dan ObjectMobilOiya, sekedar informasi, untuk semua contoh dalam buku dijalankan menggunakan terminal pada Linux dan Mac atau command prompt pada windows. Sehingga Anda perlu memastikanbahwa Komputer atau PC Anda dapat menjalankan command PHP.Anda dapat mengeceknya dengan menjalankan perintah berikut:1php --versionBila command diatas tidak dikenali, maka Anda perlu mendaftakanPATH PHP Anda ke environment variable. Anda dapat searchingmenggunakan keyword add php to environment variable² .Perlu Anda ketahui, karena class hanya sebuah prototype ataumodel, maka class dapat diinstansiasi menjadi banyak object:12345 suv new Mobil(); suv- setJumlahRoda(4); suv- setJumlahKursi(6); suv- cetak();echo PHP EOL;Karena class bersifat prototype, maka class tidak akan di-mappingkedalam memori (RAM) dan object-lah yang akan di-mappingkedalam RAM. Karena pada dasarnya, object sama saja denganvariabel biasa pada PHP.²https://www.google.com/search?q add php to environment variable

9Class dan ObjectKata KunciClass adalah cetakan,jadinya/realisasinya.objectadalahProses membuat object disebut instansiasibarang

Keyword this dan selfI. PengantarSebenarnya saya agak ragu untuk membahas tentang keyword this dan self sekarang, namun karena sudah dipakai pada pembahasan sebelumnya dan pastinya akan lebih sering dipakai lagikedepannya, maka saya akan mencoba membahasnya pada pembahasan sekarang.Saya harap, Anda tidak bingung tentang konsep kedua keyword inidalam pemrograman OOP. Dan semoga apa yang saya jelaskannantinya dapat memberikan gambaran tentang bagaimana carakedua keyword ini bekerja.II. Keyword thisPada bab-bab sebelumnya kita telah menggunakan keyword thisuntuk mengakses sebuah property seperti pada contoh dibawah ini.1234567891011 ?phpclass Mobil{private jumlahRoda;public function setJumlahRoda( jumlahRoda){ this- jumlahRoda jumlahRoda;}}10

Keyword this dan self11Dalam pemrograman berbasis object, keyword this pasti ada,walaupun cara penulisan dan mungkin namanya berbeda.Keyword this dalam OOP adalah sebuah variabel yang merujukpada object yang diinstansiasi.Maksudnya keyword this ini nantinya akan diganti dengan variabel apapun tergantung dari variabel object yang diinstansiasi.Perhatikan contoh dibawah ini.1234567891011121314 ?phpclass Mobil{private jumlahRoda;public function setJumlahRoda( jumlahRoda){ this- jumlahRoda jumlahRoda;}} mobil new Mobil(); mobil- setJumlahRoda(4);Pada contoh diatas, kita membuat object class Mobil dengan nama mobil. Maka saat itu this akan digantikan dengan variabel mobil.Dan bila kita membuat object lainnya misal mobil2 maka thisakan digantikan dengan mobil2.Dapat disimpulkan bahwa keyword this, digunakan untuk merujuk pada object yang belum diketahui dan digunakan untuk mempermudah kita dalam menuliskan code.Perlu Anda ketahui bahwa antara mobil dan mobil2 itu adalahdua object yang berbeda sehingga ketika memanggil mobil- setJumlahRoda(4)

Keyword this dan self12dan mobil2- setJumlahRoda(7) maka nilai jumlahRoda pada mobil tidak akan ditimpa oleh nilai jumlahRoda pada mobil2.Untuk lebih jelas, perhatikan contoh dibawah ini:12345678910111213141516171819202122232425 ?phpclass Mobil{private jumlahRoda;public function setJumlahRoda( jumlahRoda){ this- jumlahRoda jumlahRoda;}public function getJumlahRoda(){return this- jumlahRoda;}} mobil new Mobil(); mobil- setJumlahRoda(4); mobil2 new Mobil(); mobil2- setJumlahRoda(7);echo mobil- getJumlahRoda();//Output: 4echo PHP EOL;echo mobil2- getJumlahRoda();//Output: 7Keyword this hanya dapat digunakan pada internal class dantidak dapat dipanggil dari luar class. Selain itu, keyword this jugatidak bisa ditimpa nilainya (read-only variable).

Keyword this dan self13Kata Kunci this adalah keyword yang merujuk pada object itusendiri this hanya dapat diakses dari internal class this tidak dapat dirubah nilainya (read-only vari-able)III. Keyword selfTidak jauh berbeda dengan keyword this, keyword self punmemiliki karakteristik yang sama. Yang membedakan dengan keyword this adalah bahwa keyword self digunakan hanya untukmemanggil property atau method yang bersifat static.Contoh yang property yang bersifat static adalah constanta. Sehingga ketika kita manggil constanta didalam class maka kitamemanggilnya dengan self::NAMA CONSTANTA.Pemahaman lebih dalam tentang sifat static pada class, akan dibahas pada bab tersendiri.

Namespace, Use dan AsI. PengantarSebelum kita membahas tentang namespace, use dan as, bolehkiranya saya sedikit bercerita.Saya punya teman yang bekerja di Perusahaan A. Perusahaantersebut beralamat di Kawasan Industri Makmur Sejahter BlokMakanan Kavling 27 No. 17 Kecamatan Tanjung Priuk Jakarta Utara.Karena alamat tersebut susah sekali dihafalkan dan terlalu panjanguntuk ditulis, maka perusahaan tersebut mengontrak kotak pos.Setelah terjadi MoU, maka kantor pos memberikan alamat singkatyaitu PO BOX 14000.Sehingga sekarang, kalau saya ingin berkirim surat ke perusahaanteman saya, saya cukup menuliskan alamat PO BOX 14000 makasurat tersebut akan sampai ke perusahaan teman saya tersebut.II. NamespacePada PHP, namespace baru diperkenal pada PHP versi 5.3.X sehingga bagi Anda yang menggunakan PHP versi kurang dari 5.3tidak dapat menggunakan fitur ini.Namespace pada PHP sama seperti package pada Java yaitu fungsinyamenyatukan class-class kedalam sebuah paket. Penggunaan namespace bertujuan agar tidak terjadi pendeklarasian nama class yangsama namun dengan fungsi yang berbeda.14

Namespace, Use dan As15Contoh penggunaan namespace dalam kehidupan riil adalah sepertiblok pada perumahan. Dalam sebuah kawasan perumahan, pastiada banyak rumah yang memakai no rumah 1. Misalnya Blok ANo. 1, Blok B No. 1, Blok C No. 2 dan seterusnya.Dapat dibayangkan, jika tanpa adanya blok-blok tersebut, pastiketika seseorang mengirimkan surat ke alamat misalnya, Perumahan Permai Indah No. 1, surat tersebut bisa saja tidak sampai keorang yang seharusnya dikarenakan banyak rumah yang memakainomer rumah 1.Namun dengan adanya blok, maka kita bisa tahu, kepada siapa surattersebut harusnya diserahkan. Misal alamatnya jadi, PerumahanPermai Indah Blok A No. 1. Maka kita tahu bahwa surat tersebutadalah milik rumah di Blok A dengan nomer rumah 1.Blok dalam sebuah perumahan adalah gabungan dari banyak rumahyang disatukan dalam sebuah kawasan. Seperti itulah kira-kirafungsi dari namespace yaitu menyatukan class-class kedalam sebuah paket. Dengan namespace kita bisa tahu dengan pasti alamatsebuah class.Pada pengantar diatas, Kawasan Industri Makmur SejahterBlok Makanan Kavling 27 No. 17 Kecamatan Tanjung Priuk- Jakarta Utara adalah sebuah namespace dari class PerusahaanA.Lalu bagaimana implementasi namespace pada OOP PHP? Berikutada cara penggunaan namespace pada PHP:

Namespace, Use dan As12345678910 ?php12345678910 ?php12345678910 ?php//filename: Kendaraan/Mobil/Bmw.phpnamespace Kendaraan\Mobil;class Bmw{const MEREK 'BMW';}//filename: Kendaraan/Mobil/Lamborgini.phpnamespace Kendaraan\Mobil;class Lamborgini{const MEREK 'Lamborgini';}//filename: Kendaraan/Mobil/Toyota.phpnamespace Kendaraan\Mobil;class Toyota{const MEREK 'Toyota';}16

Namespace, Use dan As17Pada contoh diatas, kita memiliki tiga class dengan namespace yangsama yaitu Kendaraan\Mobil. Class Bmw, Lamborgini dan Toyotadisebut member dari namespace tersebut.Agar lebih jelas lagi tentang fungsi dari namespace, berikut adalahtiga class dengan nama yang sama namun dalam namespace yangberbeda.12345678910 ?php12345678910 ?php//filename: Sparepart/Mobil/Bmw.phpnamespace Sparepart\Mobil;class Bmw{const MEREK 'BMW';}//filename: Sparepart/Mobil/Lamborgini.phpnamespace Sparepart\Mobil;class Lamborgini{const MEREK 'Lamborgini';}

18Namespace, Use dan As12345678910 ?php//filename: Sparepart/Mobil/Toyota.phpnamespace Sparepart\Mobil;class Toyota{const MEREK 'Toyota';}Dengan namespace kita dapat mendefinisikan nama class yangsama, namun dengan namespace yang berbeda. Bila tanpa menggunakan namespace, jika kita mendefinisikan nama class yangsama maka akan terjadi error karena dianggap redeclare class ataumendefinisikan ulang class dengan nama yang sama.III. UseSetelah kita memahami tentang konsep namespace maka selanjutnya adalah bagaimana cara memanggil atau menggunakan namespace dalam sebuah program.Jadi untuk memanggil sebuah namespace dalam program kita, kitaharus menggunakan keyword use.Berikut adalah contoh penggunaannya:

Namespace, Use dan As12345678910111213141519 ?php//filename: index.phprequire DIR .'/Kendaraan/Mobil/Bmw.php';require DIR .'/Kendaraan/Mobil/Lamborgini.php';require DIR .'/Kendaraan/Mobil/Toyota.php';use Kendaraan\Mobil\Bmw;use Kendaraan\Mobil\Lamborgini;use Kendaraan\Mobil\Toyota;echo Bmw::MEREK.PHP EOL;echo Lamborgini::MEREK.PHP EOL;echo Toyota::MEREK.PHP EOL;Pada code diatas, Kendaraan\Mobil\Bmw, Kendaraan\Mobil\Lamborginidan Kendaraan\Mobil\Toyota merujuk pada class Bmw, Lamborginidan Toyota yang ketiganya memiliki namespace yang sama yaituKendaraan\Mobil.Bila tanpa menggunakan use maka code diatas akan menjadi sepertiberikut:1234567891011 ?php//filename: index2.phprequire DIR .'/Kendaraan/Mobil/Bmw.php';require DIR .'/Kendaraan/Mobil/Lamborgini.php';require DIR .'/Kendaraan/Mobil/Toyota.php';echo \Kendaraan\Mobil\Bmw::MEREK.PHP EOL;echo \Kendaraan\Mobil\Lamborgini::MEREK.PHP EOL;echo \Kendaraan\Mobil\Toyota::MEREK.PHP EOL;

20Namespace, Use dan AsKedua program diatas, jika dijalankan maka output-nya akan samayaitu sebagai berikut:Namespace dan UseIV. AsSebelum saya menjelaskan fungsi dari keyword as, terlebih dahuluAnda akan saya ajak untuk melakukan percobaan sederhana berikut.Kita load semua class Bmw, Lamborgini dan Toyota baik yangada pada namespace Kendaraan\Mobil maupun yang ada padanamespace Sparepart\Mobil sebagai berikut:12345678910111213 ?php//filename: index3.phprequire DIR .'/Kendaraan/Mobil/Bmw.php';require DIR .'/Kendaraan/Mobil/Lamborgini.php';require DIR .'/Kendaraan/Mobil/Toyota.php';require DIR .'/Sparepart/Mobil/Bmw.php';require DIR .'/Sparepart/Mobil/Lamborgini.php';require DIR .'/Sparepart/Mobil/Toyota.php';

21Namespace, Use dan As141516171819202122232425262728use Kendaraan\Mobil\Bmw;use Kendaraan\Mobil\Lamborgini;use Kendaraan\Mobil\Toyota;use Sparepart\Mobil\Bmw;use Sparepart\Mobil\Lamborgini;use Sparepart\Mobil\Toyota;echo Bmw::MEREK.PHP EOL;echo Lamborgini::MEREK.PHP EOL;echo Toyota::MEREK.PHP EOL;echo Bmw::MEREK.PHP EOL;echo Lamborgini::MEREK.PHP EOL;echo Toyota::MEREK.PHP EOL;Kemudian kita jalankan program tersebut. Apakah yang terjadi?Ternyata yang terjadi adalah error sebagai berikut:Fatal ErrorAdakah yang aneh dengan error tersebut? Kita kan belum menggunakan keyword use, tapi kenapa dalam pesan error muncul tulisan“Cannot use SparepartMobilBmw as Bmw because the name isalready in use”.Jadi seperti ini, ternyata secara default, PHP sebenarnya menggunakan keyword as ketika menggunakan keyword use. Atau denganbahasa lain, ketika kita menggunakan keyword use secara tidaklangsung kita juga menggunakan keyword as.Fungsi dari keyword as adalah memberikan alias kepada classketika dipanggil dalam program. Seperti yang terlihat dalam contoh, secara default alias dari suatu class adalah nama class itu

Namespace, Use dan As22sendiri.Sehingga bila kita ingin program diatas tidak error, maka yangperlu kita lakukan adalah memberikan alias untuk class yang samanamanya. Sehingga program diatas akan menjadi seperti 62728 ?php//filename: index4.phprequire DIR .'/Kendaraan/Mobil/Bmw.php';require DIR .'/Kendaraan/Mobil/Lamborgini.php';require DIR .'/Kendaraan/Mobil/Toyota.php';require DIR .'/Sparepart/Mobil/Bmw.php';require DIR .'/Sparepart/Mobil/Lamborgini.php';require DIR .'/Sparepart/Mobil/Toyota.php';use Kendaraan\Mobil\Bmw as KendaraanBmw;use Kendaraan\Mobil\Lamborgini as KendaraanLamborgini;use Kendaraan\Mobil\Toyota as KendaraanToyota;use Sparepart\Mobil\Bmw as SparepartBmw;use Sparepart\Mobil\Lamborgini as SparepartLamborgini;use Sparepart\Mobil\Toyota as SparepartToyota;echo KendaraanBmw::MEREK.PHP EOL;echo KendaraanLamborgini::MEREK.PHP EOL;echo KendaraanToyota::MEREK.PHP EOL;echo SparepartBmw::MEREK.PHP EOL;echo SparepartLamborgini::MEREK.PHP EOL;echo SparepartToyota::MEREK.PHP EOL;Sekarang, bila program diatas dijalankan maka hasilnya akan seperti

23Namespace, Use dan Asberikut:AliasBagaimana? Apakah sekarang sudah mengerti fungsi dari keywordas?Pada pengantar diatas, as diibaratkan dengan mengontrak dan POBOX 14000 adalah nama dari aliasnya.Sebenarnya pada contoh diatas, kita bisa saja hanya memberikanalias hanya pada tiga class saja sudah cukup, namun agar tidaktimbul kebingungan, akan lebih baik jika kita memberikan aliasuntuk semua class sehingga kita tahu darimana class-class tersebutberasal.

Anonymous Function danAnonymous ClassI. PengantarPernahkah Anda menggunakan jQuery? Jika pernah berarti Andatidak asing dengan syntax dibawah ini:123 (document).ready(function () {//body});Taukah Anda nama dari baris code berikut:123function () {//body}Yup, nama dari baris code diatas adalah anonymous function ataufungsi tanpa nama. Dalam PHP, konsep tersebut diadaptasi dan diimplementasikan lebih dalam lagi sehingga pada PHP tidak hanyaada anonymous function tapi juga ada anonymous class.Pada pembahasan kali ini, kita akan lebih dalam membahas tentanganonymous function dan anynomous class.II. Anonymous FunctionAnonymous function atau dikenal juga dengan closure adalah sebuah function yang tidak memiliki nama secara spesifik. Dia hanya24

Anonymous Function dan Anonymous Class25memiliki body saja seperti callback function pada javascript. Untuklebih jelas, perhatikan contoh dibawah ini:123456789 ?php tambah function (

Pengertian Object Oriented Programming I. Apa itu OOP Pemrograman berbasis object (OOP)¹ adalah sebuah paradigm

Related Documents:

PHP is FREE to download from the official PHP resource: www.php.net PHP is easy to learn and runs efficiently on the server side Where to Start? To get access to a web server with PHP support, you can: Install Apache (or IIS) on your own server, install PHP, and MySQL Or find a web hosting plan with PHP and

PHP is an acronym for "PHP: Hypertext Preprocessor" PHP is a widely-used, open source scripting language PHP scripts are executed on the server PHP is free to download and use What is a PHP File? PHP files can contain text, HTML, CSS, JavaScript, and PHP code PHP code are executed on the server, and the result is returned to the browser .

php architect's Guide to PHP Design Patterns A Practical Approach to Design Patterns for the PHP 4 and PHP 5 Developer Jason E. Sweat USA 21.99 Canada 29.99 U.K. 16.99 Net php architect's Guide to PHP Design Patterns Design patterns are comprehensive, well-tested solutions to common problems that developers everywhere encounter each day.

Some OOP features can be implemented in C or other procedural programming languages, but not enforced by these languages OOP languages: OOP concepts are embeded in and enforced by the languages. OOP Concepts 29 OOP languages vary in degrees of object-oriented Pure: Smalltalk, Eiffel, Ruby, JADE. Original OO plus some procedural features .

'big boys'. Like Java and C#, php finally has a complete OOP infrastructure. In this tutorial, you will be guided (step-by-step) through the process of building and working with objects using php's built-in OOP capabilities. At the same time you will learn: The difference between building a php application the old fashioned (procedural)

you can't view your .php page on your local hard drive; you'll either see nothing or see the PHP source code if you upload the file to a PHP-enabled web server, requesting the .php file will run the program and send you back its output 5.2: PHP Basic Syntax 5.1: Server-Side Basics 5.2: PHP Basic Syntax 5.3: Embedded PHP 5.4: Advanced PHP Syntax

My Pals are Here! 3 Edition Books A, B /Workbooks . Php 1,804.68 . The Filipino Odyssey 4 . Php 826.20 . Science for Active Learning 4 . Php 772.20 . Walking in The Spirit . Php 811.40 . HELE for Life 4 . Php 688.90 . E-Book . Php 1,404.00 . None None . Php 8,404.32 GRADE 5 . English This Way 5 (3. rd. Edition) Php 658.80 . Read rd to Lead 5 .

At the Animal Nutrition Group (ANU), a student can conduct research for a thesis with a workload of 18, 21, 24, 27, 30, 33 (Minor thesis), 36 or 39 ECTS (Major thesis). The aim of this thesis research is to train the students’ academic skills by means of an in-depth, scientific study on a subject of interest. With completion of the thesis, you have demonstrated that you can conduct a .