Nulis-Ilmu.com

Tutorial Elektronika dan Komputer

  • Home
  • Elektronika
  • Komputer
  • Javascript

Tutorial PHP OOP Part 14 : Menggunakan Interface dan Implements

29 November 2014 By Eko Purnomo

menggunakan interface dan implements

Interface yang saya maksud disini adalah sebutan singkat saya untuk Object Interface. Interface merupakan istilah untuk konsep yang akan diimplementasi pada class. interface mengijinkan kita membuat method yang harus diimplementasi pada class tanpa harus mendefinisikan bagaimana isi dari method tersebut.

Sekilas Interface memang mirip dengan class abstrak, namun prinsip dan penerapannya berbeda karena Interface memang bukan sebuah class. Interface lebih bertujuan membuat konsep method yang seragam dari pada membuat kerangka class seperti class abstrak.

Membuat Interface

Untuk membuat interface kita menggunakan keyword “interface”, diikuti dengan nama interface kemudian sepasang kurung kurawal {} yang berisi konsep-konsep method yang akan diimplementasi nantinya.

<?php  
interface namaInterface
{
public function namaMethod();
...
}
?>

Contoh membuat interface untuk class Rumus:

<?php  
interface konsepRumus
{
public function luas_persegi();
public function luas_segitiga();
public function luas_lingkaran();
}
?>

Mengimplementasi Interface

Untuk mengimplementasi interface pada class, kita menggunakan keyword “implements” dibelakang nama class.

<?php  
class namaClass implements namaInterface
{
public function namaMethod() {
...
}
}
?>

jika sebuah class mengimplementasi interface, maka pada class tersebut harus mengimplementasi semua method yang ada pada interface.
Contoh :

<?php  
<?php
interface konsepRumus {
public function luas_persegi();
public function luas_segitiga();
public function luas_lingkaran();
}

class Rumus implements konsepRumus {
public function luas_persegi() {
return "ini luas persegi";
}

public function luas_segitiga() {
return "ini luas segitiga";
}

public function luas_lingkaran() {
return "ini luas lingkaran";
}
}

$rumus = new Rumus;
echo $rumus->luas_persegi()."<br/>";
echo $rumus->luas_segitiga()."<br/>";
echo $rumus->luas_lingkaran()."<br/>";
?>

Hal-hal yang perlu diperhatikan dalam menggunakan Interface dan Implements

Dalam menggunakan interface dan implements ada beberapa aturan dan kondisi yang harus kita patuhi, diantaranya :

1. Nama class tidak boleh sama dengan nama interface

Hal ini karena PHP mendeteksi interface sebagai class, meskipun pada kenyataannya hanya berupa konsep saja. Jika nama class dan interface sama maka akan muncul error “Fatal error: Cannot redeclare class”, artinya ada pendeklarasian class kembali.

 <?php   
interface Rumus {
public function luas_persegi();
}

class Rumus implements Rumus {
public function luas_persegi() {
return "ini luas persegi";
}
}
?>

Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Cannot redeclare class Rumus in /home/sabrina/www/php/index.php on line 8

2. Method pada interface harus diset public

Karena sifatnya yang terbuka dan harus diimplementasi maka semua method pada interface harus diset public atau tidak ditulis sama sekali (sama juga berarti public). Jika diset private atau protected akan muncul error “Fatal error: Access type for interface method”.

 <?php   
interface Rumus {
private function luas_persegi();
}

class Rumus implements Rumus {
public function luas_persegi() {
return "ini luas persegi";
}
}
?>

Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Access type for interface method konsepRumus::luas_persegi() must be omitted in /home/sabrina/www/php/index.php on line 3

3. Interface tidak boleh memiliki method normal

Sebagaimana fungsi interface yang bertujuan membuat konsep bukan class, maka pada interface tidak boleh ada method normal. Hal inilah salah satu yang membedakan antara interface dan class abstrak.
Jika hal ini terjadi akan muncul error “Fatal error: Interface function cannot contain body “.

 <?php   
interface Rumus {
private function luas_persegi();
public function luas_segitiga() {
return "ini luas segitiga";
}
}

class Rumus implements Rumus {
public function luas_persegi() {
return "ini luas persegi";
}
}
?>

Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Interface function konsepRumus::luas_segitiga() cannot contain body in /home/sabrina/www/php/index.php on line 6

4. Interface bisa diturunkan

Seperti halnya class, interface juga bisa diturunkan. Untuk membuat interface turunan kita juga menggunakan keyword extends seperti pada class.

 <?php   
interface konsepRumus {
public function luas_persegi();
}

interface konsepRumusBangunDatar extends konsepRumus{
public function keliling_persegi();
}

class Rumus implements konsepRumusBangunDatar {
public function luas_persegi() {
return "ini luas persegi";
}

public function keliling_persegi() {
return "ini keliling persegi";
}
}
$rumus = new Rumus;
echo $rumus->luas_persegi()."<br/>";
?>

5. Interface bisa memiliki konstanta

Interface juga bisa memiliki konstanta seperti class. Untuk mengakses konstanta pada interface sama dengan mengakses konstanta pada umumnya yaitu menggunakan operator :: (titik dua ditulis dobel).

 <?php   
interface konsepRumus {
const pi=3.14;
public function luas_persegi();
}
echo konsepRumus::pi."<br/>";
?>

6. Sebuah class bisa mengimplementasi banyak interface sekaligus

Jika pada abstrak berlaku satu class abstrak untuk satu class, maka pada interface tidak. Kita bisa mengimplementasi beberapa interface sekaligus dalam satu class.

 <?php   
interface konsepRumus1 {
public function luas_persegi();
}
interface konsepRumus2 {
public function luas_segitiga();
}
class rumus implements konsepRumus1,konsepRumus2 {
public function luas_persegi() {
return "ini luas persegi";
}
public function luas_segitiga() {
return "ini luas segitiga";
}
}
?>

Referensi :

  • //php.net/manual/en/language.oop5.interfaces.php
  • //www.duniailkom.com/tutorial-belajar-oop-php-pengertian-object-interface-dalam-pemrograman-berbasis-objek/

Filed Under: PHP

Tutorial PHP OOP Part 13 : Pengertian Class Abstrak

28 November 2014 By Eko Purnomo

pengertian class abstrak

Pada PHP 5 kita mengenal class abstrak dan method abstrak. Class abstrak (abstract class) didefinisikan sebagai class yang tidak bisa diinstantisasi menjadi object. Sebuah class abstrak setidaknya memiliki satu method abstrak (abstract method). Untuk menggunakan sebuah class abstrak, kita harus membuat class turunan dari class abstrak tersebut.

Tujuan dari dibuat abstrak class adalah agar setiap class turunan menggunakan method abstrak pada class induk secara fleksibel. Jadi pada method abstrak di class induk hanya terdapat signature saja tanpa isi yang konkrit.

Membuat Class Abstrak

Untuk membuat class abstrak, kita menggunakan keyword “abstract” didepan keyword class. Sebuah class abstrak harus memiliki setidaknya satu method abstrak. Namun class abstrak juga bisa memiliki properti dan method normal layaknya class konkrit.

abstract class AbstractClass {
....//harus berisi setidaknya satu method abstrak
}

Membuat Method Abstrak

Untuk membuat method abstrak, kita menggunakan keyword “abstract” didepan keyword function. Jika didefinisikan hak akses-nya seperti public, private dan protected maka kita menempatkan keyword abstract tadi didepan hak akses, misal abstract public function namaFunction().

 abstract class AbstractClass  {  
// membuat method abstrak didalam class abstrak
abstract protected function abstractMethod();
}

Yang unik dalam membuat method abstrak ini adalah kita tidak perlu membuat isi method, karena memang method ini abstrak alias tidak nyata. Kita baru akan mengisi method nanti didalam class turunan. Jadi kita hanya bisa membuat method abstrak ini didalam class induk saja.

Penggunaan Class Abstrak dan Method Abstrak

Dalam penggunaan class abstrak dan method abstrak, kita harus memperhatikan beberapa hal penting yang jika tidak dipenuhi akan berakibat error dan program tidak jalan. Hal-hal tersebut diantaranya adalah sebagai berikut :

1. Class Abstrak tidak bisa diinstatisasi

Sebuah class abstrak tidak bisa langsung diinstantisasi menjadi object. Class Abstrak hanya bisa diinstantisasi menjadi object melalui class turunan. Jadi class sbstrak hanya merupakan bluprint dari class turunan.

Contoh berikut ini akan menghasilkoan error ” Fatal error: Cannot instantiate abstract class” jika dieksekusi :

<?php  
abstract class Rumus {
abstract public function luas_lingkaran();
}
$rumus=new Rumus();
?>

2. Class turunan harus mengimplementasi semua method abstrak pada class induk.

Ketika kita membuat class turunan dari class induk yang abstrak, maka kita harus mengimplementasi semua method abstrak yang ada pada class tersebut. Jika ada satu saja method abstrak yang tidak diimplementasi akan muncul error.

Contoh berikut ini akan menghasilkan error ” Fatal error: Class … contains 1 abstract method and must therefore be declared abstract or implement the remaining methods ” jika dieksekusi :

<?php  
abstract class Rumus {
abstract public function luas_lingkaran();
abstract public function luas_persegi();
}

class Luas extends Rumus {
public function luas_lingkaran() {
return "Ini method luas lingkaran";
}
}

$luas=new Luas();
echo $luas->luas_lingkaran();
?>

3. Class abstrak bisa memiliki properti, method dan static

Dalam class abstrak kita bisa membuat properti, method dan static seperti layaknya class konkrit. Untuk lebih jelas perhatikan contoh berikut ini :

<?php  
abstract class Rumus {
var $diameter;

public function jari () {
return $this->diameter / 2;
}

public static $pi=3.14;

abstract public function luas_lingkaran();
}

class Luas extends Rumus {
public function luas_lingkaran() {
return parent::$pi * $this->jari() * $this->jari();
}
}

$luas=new Luas();
$luas->diameter = 10;
echo "Luas Lingkaran dengan diameter ".$luas->diameter." = ".$luas->luas_lingkaran();
?>

Pada script diatas terdapat sebuah class abstrak Rumus yang memiliki sebuah method abstrak luas_lingkaran() tanpa isi. Kemudian class abstrak Rumus juga properti $diameter, sebuah method jari() dan sebuah static $pi.

Selanjutnya class abstrak dicetak pada class turunan Luas dan method abstraknya diimplementasi pada class tersebut sehingga syarat pada item no.2 diatas telah terpenuhi. Pada method luas_lingkaran() di class turunan kita mengakses static $pi dan method jari() pada class induk untuk menghitung luas lingkaran.

Dan untuk melihat hasilnya kita instantisasi class Luas menjadi object, kemudian kita set nilai diameternya=10 dan kita tampilkan hasil perhitungan dari method luas_lingkaran().

Jika benar maka script diatas akan menghasilkan tampilan :

Luas Lingkaran dengan diameter 10 = 78.5

Referensi :

  • //php.net/manual/en/language.oop5.abstract.php

Filed Under: PHP

Tutorial PHP OOP Part 12 : Apa itu Static, Parent dan Self ?

27 November 2014 By Eko Purnomo

Static, Parent dan Self adalah keyword pada PHP OOP yang merupakan perintah dalam membuat dan menangani sebuah static properti atau static method didalam class. Keyword “static” dipakai saat membuat static properti atau static method sedangkan keyword “parent” dan “self” dipakai untuk mengakses properti atau method tersebut didalam class dan class turunannya.

Keuntungan dari membuat static properti dan static method adalah kita bisa mengaksesnya tanpa membuat instantisasi object. Hal ini telah dibahas pada tulisan sebelumnya tentang operator Scope Resolution (::) .

Membuat Static Properti dan Static Method

Untuk membuat static properti dan static method kita menggunakan keyword “static”. Kita juga bisa menggunakan teknik enkapsulasi seperti public, private dan protected dalam membuat static properti dan static method.

Membuat Static Properti

class Classname {
public static $var = Value;
}

Membuat Static Method

class Classname {
public static function aStaticMethod() {
// ...
}
}

Contoh Membuat Static Properti dan Static Method

 <?php  
class Sekolah
{
public static $namaSekolah = 'SMPN 1 WELAHAN';

public static function showSekolah() {
return self::$namaSekolah;
}
}

?>

Mengakses Static Properti dan Static Method

Dalam mengakses  static properti dan static method kita menggunakan operator scope resolution (::). Kita bisa mengakses  static properti dan static method didalam dan diluar class. Untuk mengakses dari luar class kita gunakan nama class, operator :: dan nama static, contoh : MyClass::CONSTANT.

Dan untuk mengakses  static properti dan static method didalam class kita gunakan keyword “self”. Untuk mengakses  static properti dan static method pada class induk (diakses dari class turunan) kita gunakan keyword “parent”. Dengan demikian kita tidak perlu menggunakan variabel $this saat akan mengakses static properti dan static method didalam class.

Mengakses Static Properti dan Static Method pada class (Induk)

 <?php  
class Sekolah {
public static $namaSekolah = 'SMPN 1 WELAHAN';

public function showSekolah() {
return self::$namaSekolah;
}
}

//mengakses static properti secara langsung
print Sekolah::$namaSekolah . "<br/>";

//mengakses static properti dengan static method
print Sekolah::showSekolah() . "<br/>";
?>

Mengakses Static Properti dan Static Method pada class turunan

 <?php  
class Sekolah
{
public static $namaSekolah = 'SMPN 1 WELAHAN';

public static function showSekolah() {
return self::$namaSekolah;
}
}

class Siswa extends Sekolah
{
public static $namaSiswa = 'SABRINA';

public static function showSiswa() {
return self::$namaSiswa ." dari ".parent::$namaSekolah;
}
}

//mengakses static properti class induk secara langsung
print Sekolah::$namaSekolah . "<br/>";

//mengakses static properti class induk dengan method
print Sekolah::showSekolah() . "<br/>";

//mengakses static properti class anak secara langsung
print Siswa::$namaSiswa . "<br/>";

//mengakses static properti class induk dan class anak dengan method
print Siswa::showSiswa() . "<br/>";
?>

Pada program diatas kita membuat dua cuah class, yaitu class Sekolah (class induk) dan class Siswa yang merupakan turunan dari class Sekolah.

Pada class Sekolah terdapat sebuah static properti $namaSekolah dan static method showSekolah(). Pada method showSekolah terlihat kita mengakses static properti $namaSekolah dengan keyword self.

Pada class Siswa yang merupakan turunan dari class Sekolah, sebuah static properti $namaSiswa dan static method showSiswa(). Pada method showSiswa ini terlihat kita mengakses dua buah static properti yaitu $namaSekolah dan $namaSiswa.

Karena  berada pada class induk maka kita mengakses Statis properti $namaSekolah dengan keyword parent. Sementara untuk mengakses static properti $namaSiswa kita menggunakan keyword self.

Jika script diatas dijalankan akan tampil seperti ini :

SMPN 1 WELAHAN
SMPN 1 WELAHAN
SABRINA
SABRINA dari SMPN 1 WELAHAN

Referensi :

  • //php.net/manual/en/language.oop5.static.php

Filed Under: PHP

Tutorial PHP OOP Part 11 : Mengenal Operator Scope Resolution (::)

26 November 2014 By Eko Purnomo

mengenal operator scope resolution::

Operator scope resolution (::) atau dalam bahasa indonesia berarti operator resolusi ruang lingkup adalah operator yang membuat kita diijinkan untuk mengakses static, konstanta, properti dan method pada sebuah class. Operator ini juga disebut dengan Paamayim Nekudotayim. Dengan operator (::) kita bisa mengakses secara langsung sesuatu tanpa instantisasi object. Kita pernah membahas operator ini pada tulisan konstanta pada class.

Ketika kita mereference item ini dari luar definisi class, kita harus menggunakan nama class. Mulai pada PHP 5.3.0 dimungkinkan mereferen class menggunakan variabel. Yang penting nilai variabel tidak boleh berupa keyword, seperti self, parent dan static.

Untuk lebih jelas perhatikan cara menggunakan operator :: berikut ini :

1. Menggunakan operator :: dari luar class

 <?php  
//membuat class
class MyClass {
const KONSTANTA = 'Nilai Konstan';
}

//memanggil konstanta pada class tanpa instantisasi object
echo MyClass::KONSTANTA."<br/>";

//menggunakan variabel dalam mereferen class
$classname = 'MyClass';
echo $classname::KONSTANTA; // As of PHP 5.3.0
?>

2. Menggunakan operator :: dari dalam class

Ada tiga keyword khusus yang bisa dipakai dalam menggunakan operator :: didalam class, yaitu : static, parent dan self.

 <?php  
class MyClass {
const KONSTANTA = 'Nilai Konstan';
}

//membuat class anak turunan dari MyClass
class Anak extends MyClass
{
public static $my_static = 'Variabel Static';
public static function doubleColon() {

echo parent::KONSTANTA . "<br/>";
echo self::$my_static . "<br/>";
}
}

//memanggil method pada class tanpa instantisasi object
//dengan mereferen dari variabel
$classname = 'Anak';
echo $classname::doubleColon(); // As of PHP 5.3.0

//memanggil method pada class tanpa instantisasi object
Anak::doubleColon();
?>

3. Memanggil method pada parent class (class induk)

Ketika class turunan menimpa method yang ada pada class induk (parent class) maka PHP tidak akan memanggil method pada class induk. Jadi bergantung pada class turunan mau menggunakan method pada class induk atau tidak. Cara ini juga dipakai pada Constructors,  Destructors, Overloading, dan definisi Magic method.

 <?php  
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()<br/>";
}
}

class Anak extends MyClass
{
// Membuat function yang menimpa function pada induk
public function myFunc()
{
// tapi masih bisa mengakses method dari class induk
parent::myFunc();

echo "Anak::myFunc()<br/>";
}
}

$class = new Anak();
$class->myFunc();
?>

Pada contoh terdapat class induk MyClass yang mempunyai method myFunc dengan perintah menampilkan “MyClass::myFunc()” untuk menandai bahwa tampilan ni dihasilkan oleh method myFunc() pada class induk.

Kemudian kita membuat class turunan bernama Anak dan membuat method bernama myFunc() juga, sama dengan method pada class induk. Kemudian pada method tersebut kita membuat dua perintah, yaitu { parent::myFunc(); } untuk mengakses method myFunc() pada class induk dan { echo “Anak::myFunc()<br/>”; } untuk menampilkan tulisan “Anak::myFunc()”.

Referensi :

  • //php.net/manual/en/language.oop5.paamayim-nekudotayim.php

Filed Under: PHP

Tutorial PHP OOP Part 10 : Membuat Autoloading Class

26 November 2014 By Eko Purnomo

membuat autoloading class


Autoloading class adalah sebuah cara untuk memanggil sebuah class pada file lain tanpa menggunakan fungsi include. Seperti telah dijelaskan sebelumnya bahwa kita sebaiknya membuat class pada file tersendiri, yang selanjutnya ini kita sebut dengan modul.

Dengan membuat class pada file terpisah, kita tidak harus mengulang menulis sebuah class yang sama, namun cukup menyertakannya saja. Nah, autoloading class ini membuat cara menyertakan class menjadi lebih ringkas tanpa harus menuliskan perintah include.

Alasan lain adalah saat ini kebanyakan developer menulis dan menyimpan class sesuai dengan definisinya masing-masing. Masalah yang kemudian terjadi adalah banyaknya include yang harus ditulis diawal sebuah file, jika hanya satu atau dua file tidak apa, lha bagaimana jika file yang diinclude berjumlah puluhan, hal ini tentu menjadi akan sangat tidak efisien.

Membuat Autoloading Class

Kita bisa membuat autoloadng class dengan function __autoload(). Tanda __ adalah underscore (_) yang ditulis dua kali seperti pada function __construct(). Fungsi ini otomatis akan memanggil class saat kita akan menggunakannya, meskipun belum didefinisikan sebelumnya.

function __autoload($class_name) {
include $class_name . '.php';
}

Ada beberapa aturan yang memudahkan kita dalam menggunakan autoloading class, yaitu :

  1. Kita buat satu class satu file modul.
  2. Nama file modul harus sama dengan nama class, termasuk memperhatikan huruf besar dan kecilnya.
  3. File modul berada pada folder yang sama dengan file php. Jika berada pada folder lain harus sertakan path yang lengkap.
  4. fungsi __autoloading harus ada pada file php.

Contoh membuat autoloading class :

1. Buat class Rumus1 lalu simpan dengan nama Rumus2.php

 <?php  
class Rumus1 {
var $panjang;
var $lebar;

function luas() {
return $this->panjang * $this->lebar;
}

function __construct($x,$y) {
$this->panjang = $x;
$this->lebar = $y;
}
}
?>

2. Buat class Rumus2 lalu simpan dengan nama Rumus2.php

 <?php  
class Rumus2 {
var $diameter;

function luas() {
$r = $this->diameter /2;
return 3.14 * $r * $r;
}

function __construct($x) {
$this->diameter = $x;
}
}
?>

3. Buat file php yang menggunakan dua class tadi

 <?php  
function __autoload($class_name) {
include $class_name . '.php';
}

$rumus1 = new Rumus1(5,8);
$rumus2 = new Rumus2(8);

echo "Luas Rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas Rumus2 = ".$rumus2->luas();
?>

4. Pastikan ketiga file berada pada folder yang sama.

5. Jalankan file, jika benar akan tampil seperti ini :

Luas Rumus1 = 40
Luas Rumus2 = 50.24

Referensi :

  • //php.net/manual/en/language.oop5.autoload.php

Filed Under: PHP

Tutorial PHP OOP Part 9 : Menaruh Class dalam Modul

26 November 2014 By Eko Purnomo

menaruh class dalam modul

Agar lebih efisien dalam pemrograman, kita bisa menaruh class didalam sebuah file tersendiri lalu meng-include file tersebut dalam setiap file PHP. Dengan demikian kita tidak perlu menulis ulang class dalam setiap file dan jika ada kesalahan atau modifikasi pada class, kita cukup merubah class dalam satu file tersebut.

Dalam pemrograman, teknik ini dinamakan teknik modularitas. Dimana file class yang dibuat terpisah dan bisa dipakai oleh beberapa file tadi disebut dengan modul. Kata modul mengadopsi istilah yang berarti bagian atau part dari sebuah alat atau perangkat. Langkah-langkah membuat modul dan proses include-nya sama dengan teknik include PHP dasar.

Berikut ini langkah-langkah menaruh class dalam modul :

1. Buat class dalam sebuah file lalu simpan dengan nama class.php

 <?php  
class Rumus {
var $panjang;
var $lebar;

function luas() {
return $this->panjang * $this->lebar;
}

function __construct($x,$y) {
$this->panjang = $x;
$this->lebar = $y;
}
}
?>

2. Buat file index.php pada folder yang sama, lalu include file class.php tadi dalam file index.php yang baru dibuat

 <?php  
include "class.php";

$rumus = new Rumus(5,8);
echo "Luas = ".$rumus->luas();
?>

3. Coba jalankan file index.php, jika benar akan tampil seperti ini :

Luas = 40

Selanjutnya dengan teknik modularitas ini kita bisa membuat auto loading class, yaitu memanggil file class secara otomatis saat membuat object dari sebuah class tanpa harus di- include file-nya. Untuk mempelajari fitur auto loading class lebih lanjut insyaAllah akan ditulis pada artikel selanjutnya.

Referensi :

  • //blog.rosihanari.net/ebook-panduan-praktis-oop-di-php/
  • //www.w3schools.com/php/php_includes.asp

Filed Under: PHP

  • « Previous Page
  • 1
  • …
  • 43
  • 44
  • 45
  • 46
  • 47
  • …
  • 60
  • Next Page »

Kategori

  • Android
  • Blogging
  • CSS
  • Desain
  • Elektronika
  • HTML
  • Internet
  • Javascript
  • Komputer
  • Mikrokontroler
  • PHP
  • Website

Pos-pos Terbaru

  • Rangkaian Adaptor 12 Volt 3 Ampere
  • 10 Aplikasi Transportasi Online Terbaru 2018
  • 3 Cara Screenshot di Laptop Windows
  • Rangkaian Adaptor 12V 35Ampere
  • Komunitas Desainer Kampung Jepara
  • Solder Yang Bagus dan Berkualitas
  • Cara Melewatkan Parameter ke dalam Fungsi pada Bahasa C
  • Parameter Dalam Bahasa C: Formal dan Aktual
  • Prototipe Fungsi dalam Bahasa C
  • Cara Menggunakan Fungsi dalam Bahasa C
  • Home
  • Privacy
  • Disclaimer
  • Kontak

Copyright © 2024 · Nulis-ilmu.com