"Hello, Amigo! Ngayon ay magbubukas ako ng bago at kawili-wiling mundo sa iyong pananaw. Ang pinag-uusapan ko ay tungkol sa Object-Oriented Programming (OOP) . Nakilala mo na ang mga klase at bagay. Ngayon ay pupunta ka upang malaman ang higit pa tungkol sa kanila, higit pa."

Magsisimula tayo sa apat na haligi ng OOP. Ang mga ito ay abstraction, encapsulation, inheritance, at polymorphism. (Dati ay tatlo, ngunit ang abstraction ay idinagdag sa ibang pagkakataon)

1) Abstraction.

Ang isang magandang halimbawa ng abstraction sa totoong buhay ay ang mga paglalarawan ng trabaho sa isang kumpanya. Ang isang titulo ng trabaho ay isang bagay, ngunit ang mga tungkulin nito ay isang ganap na naiibang bagay.

Isipin mong gagawa ka ng org chart para sa iyong kumpanya sa hinaharap. Maaari mong hatiin ang mga tungkulin ng isang sekretarya, ikalat ang mga ito sa ilang iba pang mga posisyon. Maaari mong hatiin ang trabaho ng CEO sa ilang magkakahiwalay na posisyon: chief financial officer, chief technology officer, chief marketing officer, chief human resources officer. O maaari mong pagsamahin ang mga posisyon ng office manager at recruiter sa isa.

Ipagpalagay na makabuo ka ng mga pangalan para sa mga posisyon sa iyong kumpanya, at pagkatapos ay "ilabas" mo ang mga responsibilidad para sa mga posisyon na ito. Iyon ay abstraction - paghahati ng isang bagay na malaki at monolitik sa ilang maliliit na bahagi.

OOP: mga pangunahing prinsipyo - 1

Mula sa pananaw ng isang programmer, ang abstraction ay wastong paghahati ng isang programa sa mga bagay.

Ang isang malaking programa ay karaniwang maaaring kinakatawan bilang mga bagay na nakikipag-ugnayan sa alinman sa isang dosenang iba't ibang paraan. Hinahayaan ka ng abstraction na pumili ng mga pangunahing katangian ng isang bagay at alisin ang anumang bagay na hindi gaanong mahalaga.

Ang abstraction ay parang diskarte sa militar. Kung pinili mo ang maling diskarte, walang mapanlikhang taktika ang magliligtas sa araw.

2) Encapsulation.

Ang encapsulation ay inilaan upang mapabuti ang pakikipag-ugnayan sa pagitan ng mga bagay sa pamamagitan ng pagpapasimple sa mga ito.

OOP: pangunahing mga prinsipyo - 2

Ang pinakamahusay na paraan upang gawing simple ang isang bagay ay upang itago ang anumang kumplikado mula sa mga hindi kailangang malaman ang tungkol dito. Halimbawa, kung uupo ka sa likod ng mga kontrol ng piloto ng isang Boeing jet, magtatagal ito upang maunawaan kung paano gumagana ang mga ito:

OOP: pangunahing mga prinsipyo - 3

Sa kabilang banda, ang lahat ay mukhang mas simple sa mga pasahero sa eroplano: bumili sila ng tiket at sumakay sa eroplano, na pagkatapos ay lumipad at lumapag. Madali kang lumipad mula sa kontinente patungo sa kontinente, alam lamang kung paano «bumili ng tiket» at «sasakay ng eroplano». Wala kaming nakikitang anumang kumplikadong nauugnay sa paghahanda ng eroplano para sa paglipad, pag-alis, paglapag, at iba't ibang potensyal na sitwasyong pang-emergency. At wala kaming binanggit na satellite navigation, autopilot, at mga air traffic control center. Pinapasimple nito ang ating buhay.

Sa mga tuntunin ng programming, ang encapsulation ay "itinago ang pagpapatupad". Gusto ko ang definition na iyon. Ang aming klase ay maaaring maglaman ng daan-daang mga pamamaraan at magpatupad ng lubos na kumplikadong pag-uugali sa iba't ibang sitwasyon. Ngunit maaari naming itago ang lahat ng mga pamamaraan nito mula sa prying eyes (sa pamamagitan ng pagmamarka sa kanila na « pribado »), na nag-iiwan lamang ng dalawa o tatlong paraan para sa pakikipag-ugnayan sa ibang mga klase (sa pamamagitan ng pagmamarka sa kanila na « publiko »). Pagkatapos ang lahat ng iba pang mga klase sa aming programa ay makikita lamang—at tatawagin—ang ilang mga pamamaraan sa klase na ito . Ang lahat ng pagiging kumplikado ng klase ay itatago sa loob, tulad ng sabungan na hindi nakikita ng masasayang pasahero.

3) Pamana.

Ang mana ay isang konsepto sa programming at totoong buhay. Sa programming, ang inheritance ay isang espesyal na relasyon sa pagitan ng dalawang klase. Ngunit ang pamana sa totoong buhay ay higit na kawili-wili.

Kung kailangan nating lumikha ng isang bagay sa totoong buhay, mayroon tayong dalawang pagpipilian:

1) gawin ang kailangan natin mula sa simula, at gumugol ng maraming oras at pagsisikap sa paggawa nito.

2) gawin ang kailangan natin gamit ang mga bagay na mayroon na.

Ang pinakamahusay na diskarte ay ito: Kumuha kami ng isang umiiral na magandang solusyon, muling ginagawa at sinasabunutan ito upang matugunan ang aming mga pangangailangan, at pagkatapos ay gamitin ito.

Isaalang-alang, ebolusyon ng tao. Kung susuriin natin ang kanilang simula pabalik sa simula ng buhay sa planeta, makikita natin na bilyun-bilyong taon na ang lumipas. Ngunit kung iisipin natin na ang mga tao ay nagsisimula sa mga unggoy, ilang milyong taon na lang ang lumipas. Ang paglikha ng isang bagay mula sa simula ay tumatagal. Mas matagal.

Katulad nito, sa programming maaari tayong lumikha ng isang klase batay sa isa pa. Ang bagong klase ay nagiging isang inapo (tagapagmana) ng isang umiiral na klase. Ito ay sobrang nakakatulong kapag mayroon ka nang klase na naglalaman ng 80-90% ng mga kinakailangang data at pamamaraan. Nagdedeklara lang kami ng angkop na klase bilang magulang ng aming bagong klase. Lahat ng data at pamamaraan ng parent class ay awtomatikong nagiging bahagi ng bagong klase. Maginhawa, tama?

4) Polymorphism.

Ang polymorphism ay konsepto ng programming na naglalarawan sa sitwasyon kung saan ang iba't ibang mga pagpapatupad ay nakatago sa likod ng parehong interface. Upang makahanap ng analog sa totoong buhay, maaari nating tingnan ang proseso ng pagmamaneho ng kotse.

Kung ang isang tao ay maaaring magmaneho ng trak, maaari rin siyang ilagay sa likod ng gulong ng isang ambulansya o isang sports car. Ang isang tao ay maaaring magmaneho ng kotse anuman ang uri nito, dahil lahat sila ay may parehong control interface: isang manibela, mga pedal, at isang gearshif. Ang mga kotse ay nakaayos nang iba sa loob, ngunit lahat sila ay may parehong control interface.

Bumalik sa programming, hinahayaan tayo ng polymorphism na makipag-ugnayan sa mga bagay ng iba't ibang klase (karaniwan ay may isang karaniwang ninuno) sa parehong paraan. Ang kahalagahan nito ay hindi maaaring bigyang-diin nang labis. Ito ay nagiging mas mahalaga habang lumalaki ang isang programa.

Ang OOP ay mga prinsipyo. Mga batas sa programming. Ang bawat isa sa kanila ay naghihigpit sa amin sa ilang paraan, ngunit bilang kapalit ay nagbibigay ng malalaking pakinabang habang lumalaki ang mga programa. Ang apat na prinsipyo ng OOP ay parang apat na paa ng isang upuan. Kung aalisin mo ang kahit isa sa kanila, magiging hindi matatag ang buong sistema.