tutorial

SOLID apa 5 prinsip program sing berorientasi obyek

SOLID minangka akronim, nuduhake limang prinsip desain berorientasi obyek (OOD utawa OOP). Iki minangka pedoman sing bisa digunakake pangembang kanggo nggawe piranti lunak sing gampang dikelola, dikelola lan ditambah. Ngerti konsep kasebut bakal nggawe sampeyan pangembang sing luwih apik lan mbantu sampeyan ngindhari masalah manajemen piranti lunak. Apa tegese dadi programmer sing apik?

Sapa wae sing duwe pengalaman ing pamrograman piranti lunak milih kode piranti lunak sing ditulis dening wong liya, nggunakake paramèter pangadilan adhedhasar path kariré.

Sajrone karir profesional, aku wis ngerti akeh pangembang, lan aku wis ndeleng ewonan baris kode lan nalika kudu ngevaluasi katrampilan pangembang, umume ndeleng rong faktor:

  • Kesederhanaan nalika maca kode;
  • Kepiye kodhe kasebut bisa digunakake lan terus suwe saya suwe.

Untunge, ana sawetara dhasar utawa prinsip sing nggawe gampang dadi luwih apik ing kode.

singkatan SOLID tegese:
S: prinsip tanggung jawab tunggal
O: asas tertutup
L: Prinsip substitusi Liskov
I: Prinsip pamisahan antarmuka
D: Prinsip Inversi Dependensi

Ayo miwiti kanthi mriksa prinsip SOLID pisanan, yaiku

Prinsip Tanggung jawab Tunggal

Kelas (utawa modul) kudu mung siji alesan kanggo ngganti, supaya bisa berkembang.

Konsep kasebut pancen gampang banget, nanging kanggo nggayuh kesederhanaan iki, jalur implementasine bisa uga rumit. Kelas kudu mung siji alesan kanggo ngganti.

Nanging kenapa? 

Napa penting banget mung kudu siji alasan kanggo ngganti?

Contone, yen ana rong alasan sing beda kanggo ngganti, bisa dipikirake yen rong tim beda bisa nggarap kode sing padha amarga rong alasan sing beda. Saben kudu ngetrapake solusine dhewe, sing nalika ana basa sing dikompilasi (kayata C ++, C # utawa Java), bisa nyebabake modul sing ora kompatibel karo tim liyane utawa bagean liyane saka aplikasi kasebut.

Contone liyane, yen sampeyan nggunakake basa sing diinterpretasi, sampeyan bisa uga kudu nyoba kelas utawa modul sing padha amarga macem-macem sebab. Iki tegese luwih akeh kerja, wektu lan gaweyan kanggo ngontrol kualitas.

Ngenali siji fitur sing kudu diduweni kelas utawa modul luwih rumit tinimbang mung ndeleng dhaptar priksa kanggo mbukak tes. 

Nanging ayo nyoba mikir saka sudut pandang sing kurang teknis, yaiku, coba coba analisa pangguna kelas utawa modul kita, yaiku sapa sing bakal nggunakake. Aspek dhasar sing kudu dielingi yaiku kasunyatan manawa pangguna aplikasi utawa sistem sing dikembangake sing dilayani modul tartamtu yaiku sing njaluk modifikasi. Sing dilayani bakal njaluk ganti kelas utawa modul. 

Sawetara conto modul lan panggunaan:

  • Modul pangopènan: pangguna digawe saka administrator database lan arsitek piranti lunak.
  • Modul nglaporake: pangguna kalebu buruh kantor, akuntan lan produksi.
  • Modul pitungan pembayaran kanggo sistem manajemen gaji: pangguna bisa kalebu pengacara, manajer lan akuntan.
  • Modul telusuran teks kanggo sistem manajemen perpustakaan: pangguna bisa diwakili dening pustakawan utawa dening pengunjung lan pelanggan perpustakaan kasebut dhewe.

Dadi, yen langkah pertama yaiku nggoleki aktor utawa aktor sing duwe peran interlocutor karo modul, nggandhengake individu kanthi kabeh peran bisa dadi angel. Ing perusahaan cilik, siji wong bisa main akeh peran nalika perusahaan gedhe bisa uga ana pirang-pirang wong sing duwe peran siji. 

Kayane luwih wajar kanggo ngenali peran, tinimbang wong utawa pangguna.

Mulane:

  • nggunakake sistem piranti lunak definerangake alasan kanggo owah-owahan;
  • tanggung jawab yaiku kulawarga fungsi sing nyukupi kabutuhane aktor tartamtu, yaiku pangguna sistem;
  • aktor, pangguna dadi sumber pangowahan kanggo kulawarga fungsionalitas sing kudu nyukupi kebutuhan pangguna;
  • evolusi kabutuhan pangguna, nuntun evolusi fungsi;

Ayo ndeleng conto

Umpama kita duwe kelas Buku sing nyusun konsep buku lan fungsine.

Buku Kelas {

    fungsi getTitle () {

        bali "A Great Book";

    }

    fungsi getAuthor () {

        bali "Alessandro Baricco";

    }

    fungsi kaca sabanjuré () {

        // kaca sabanjure

    }

    fungsi printCurrentPage () {

        kumandhang "isi kaca saiki";

    }

}

Iki kelas sing normal banget. Kita duwe buku, lan kelas bisa menehi judhul, bisa menehi penulis, lan bisa terus. Pungkasan, sampeyan uga bisa nyithak kaca saiki ing layar. 

Nanging, ana masalah cilik. 

Mikir babagan aktor sing melu manajemen obyek Book, sapa sejatine? 

Kita bisa gampang mikir babagan rong aktor ing kene: Manajemen buku (minangka perpustakaan) yaiku Mekanisme pengajuan data (kaya carane pengin ngirim konten menyang pangguna: layar, antarmuka pangguna grafis, antarmuka panganggo mung teks, bisa uga dicetak). 

Mula, kita duwe rong aktor sing beda banget sing sesambungan karo kelas.

Sacara ringkes, kelas iki nggawe campuran ing antarane:

  • logika bisnis karo 
  • presentasi 

iki bisa dadi masalah amarga nglanggar prinsip tanggung jawab tunggal (SRP). 

Kepiye cara ngganti, kepiye cara nambah kode iki kanggo ngurmati prinsip tanggung jawab tunggal?

Priksa kode ing ngisor iki:

Buku Kelas {

    fungsi getTitle () {

        bali "Oceano Mare";

    }

    fungsi getAuthor () {

        bali "Alessandro Baricco";

    }

    fungsi nguripake kaca () {

        // kaca sabanjure

    }

    fungsi getCurrentPage () {

        kumandhang "isi kaca saiki";

    }

}

antarmuka Printer {

    fungsi printPage ($ kaca);

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

}

kelas StampaLibro ngleksanakake Printer {

    fungsi printPages ($ kaca) {

        kumandhang $ kaca;

    }

}

 

kelas htmlPrinter ngetrapake Printer {

    fungsi printPages ($ kaca) {

        kumandhang ' '. $ kaca ' ';

    }

}

Conto sing gampang banget iki nuduhake cara misahake presentasi saka logika bisnis, lan tundhuk karo SRP, menehi kaluwihan gedhe ing fleksibilitas proyek kita.

Ayo goleki conto liyane:

Tuladha sing padha karo ing ndhuwur yaiku nalika obyek bisa nyimpen lan njupuk saka presentasi.

Buku Kelas {

    fungsi getTitle () {

        bali "Oceano Mare";

    }

    fungsi getAuthor () {

        bali "Alessandro Baricco";

    }

    fungsi nguripake kaca () {

        // kaca sabanjure

    }

    fungsi getCurrentPage () {

        bali "isi kaca saiki";

    }

    fungsi simpen () {

        $ filename = '/ documents /'. $ iki-> getTitolo (). '-'. $ iki-> getAuthor ();

        file_put_contents ($ filename, serialize ($ iki));

    }

}

Kaya sadurunge, ing kene kita uga bisa ngenali macem-macem aktor kaya Manajemen buku (minangka perpustakaan) yaiku Tekun terus. Yen pengin ngowahi cara menyang kaca, kita kudu ngganti kelas iki. Kita bisa duwe sawetara sebab pangowahan.

Buku Kelas {

    fungsi getTitle () {

        bali "Oceano Mare";

    }

    fungsi getAuthor () {

        bali "Alessandro Baricco";

    }

    fungsi nguripake kaca () {

        // kaca sabanjure

    }

    fungsi getCurrentPage () {

        bali "isi kaca saiki";

    }

}

kelas SimpleFilePersistence {

    save fungsi (Book $ book) {

        $ filename = '/ documents /'. $ book-> getTitle (). '-'. $ book-> getAuthor ();

        file_put_contents ($ filename, serialize ($ book));

    }

}

Pindhah operasi ketekunan menyang kelas liyane kanthi jelas bakal misahake tanggung jawab lan kita bakal bebas ngganti metode ketekunan tanpa mengaruhi kelas Buku. Contone, ngleksanakake kelas DatabasePersistence bakal sepele, lan logika bisnis sing dibangun sajrone operasi buku ora bakal owah.

Terusake maca prinsip nomer loro Bukak / Ditutup ->

Ercole Palmeri

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Artikel anyar

Intervensi inovatif ing Augmented Reality, karo panampil Apple ing Poliklinik Catania

Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…

3 May 2024

Keuntungan saka Mewarnai Kaca kanggo Bocah-bocah - jagad sihir kanggo kabeh umur

Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…

2 May 2024

Masa Depan Iki: Kepiye Industri Pengiriman Revolusi Ekonomi Global

Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...

1 May 2024

Penerbit lan OpenAI menehi tandha persetujuan kanggo ngatur aliran informasi sing diproses dening Artificial Intelligence

Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…

30 April 2024