Java, karýeramda ilkinji öwrenen dilim. Onuň gurluşy programmirleme düşünjelerine düşünen ilkinji ýyllarymda esas bolup durýar. Dürli çemeleşmeler bilen başga-da birnäçe dilleri öwrenenimden soň, pikirimi giňeltdim. Bu gün miras ideýasy hakda pikirlenmek isleýärin.
Java-da miras ideýasy subtip ýazmak düşünjesi bilen berk baglanyşýar. Subtiping - IS A gatnaşyklarynyň durmuşa geçirilmegi. Mysal üçin, Rabbit
synpy Mammal
synpynyň bir görnüşi. Mundan beýläk, Rabbit
mysalynda Mammal
ähli gylyk-häsiýetleri bar: bu gylyk-häsiýet miras alýar.
Şol sebäpli, bir usul Mammal
parametrini talap edeninde ýa-da yzyna gaýtarmagyň görnüşi Rabbit
bolanda Mammal
Rabbit
mysalyndan geçip bilersiňiz. Java, .Net ýa-da uzakdan şuňa meňzeş bir zady öwrenen bolsaňyz, mirasy şeýle görýärsiňiz we täze adaty bolýar.
Bu aç-açan miras .
class Animal { void feed(); } class Rabbit extends Animal { //1 }
Rabbit
Animal
IS A
üçin, feed()
Go-a ilkinji gezek seredenimde, henizem miras berýän mahaly onuň ýazuw görnüşiniň ýokdugyna haýran galdym. Go, ördek ýazmagy ulanýar:
Ördek ýaly görünýän, ördek ýaly ýüzýän we ördek ýaly bökýän bolsa, belki şeýledir.
Go struct
interfeýs ýaly funksiýalary ýerine ýetirýän bolsa, interfeýsi aç-açan ýerine ýetirýär .
type Animal interface { feed() //1 } type Rabbit struct { } func (rabbit Rabbit) feed() { //2 // feeds }
Animal
iýmitlendirip bilerRabbit
parametr hökmünde alýan feed()
funksiýasy barlygy sebäpli, Rabbit
Animal
ýerine ýetirýär
Goalňyşlyk bilen işlemek çemeleşmesini halamok, ýöne aç-açan durmuşa geçirmek hakda iki pikirde boldum. Bir tarapdan, munuň täze düşünje bolandygyna düşündim we aç-açan bolmaga synanyşdym; beýleki tarapdan, programma üpjünçiligini döretmekde ýa-da hakyky durmuşda zatlar elmydama aç-açan aýdyňdyr diýip pikir edýärin.
Python, miras hakda bilýän iň gyzykly dilim.
Subtiping we görnüşe esaslanýan miras Python-da döredilen gününden bäri bar.
class Animal: def feed(self): #1 pass #2 class Rabbit(Animal): #3 pass
Animal
iýmitlendirip bilerRabbit
Animal
IS A
üçin, feed()
Bu nukdaýnazardan, Python miras nukdaýnazaryndan Java bilen birmeňzeş işleýär. Python, şeýle hem, jadyly usullar hökmünde suratlandyran ördek ýazmagy hödürleýär. Mysal üçin, gaýtalanyp boljak bir zat etmek üçin, meselem , iteratory yzyna gaýtaryp bilýän, diňe __iter__()
we __next__()
ýerine ýetirmeli:
class SingleValueIterable(): done = False def __init__(self, value): self.value = value def __iter__(self): #1 return self def __next__(self): #1 if self.done: raise StopIteration else: self.done = True return self.value svi = SingleValueIterable(5) sviter = iter(svi) #2 for x in sviter: print(x) #3
Iterator
dörediň - Pythons ýokardaky usullary durmuşa geçirenimizden bäri bilýär5
nji çap
Ördek ýazmak usulyndaky mesele, diňe Pythonyň öňünden kesgitlenen jadyly usullary üçin işleýär. Üçünji tarapyň doly miras alyp biljek synpyny hödürlemek isleseňiz näme etmeli?
class Animal: def feed(): pass class Rabbit: def feed(): pass
Aboveokardaky bölekde, Rabbit
Animal
däl, gaty gynandyryjy. Protokollar: Gurluş görnüşi (statik ördek ýazmak) atly PEP 544 giriziň. PEP synplarymyz üçin jadyly usullary kesgitlemegiň mümkin däldigini çözýär. Simpleönekeý Protocol
synpyny kesgitleýär: ondan miras alanyňyzdan soň, synpda kesgitlenen usullar ördek ýazmaga hukukly bolýar, şonuň üçin ady - statik ördek ýazmak.
from typing import Protocol class Animal(Protocol): #1 def feed(): #2 pass class Rabbit: def feed(): #2 pass class VenusFlytrap: def feed(): #2 pass
Protocol
mirasAnimal
Protocol
bolany üçin, feed()
kesgitleýän islendik synp, gowy ýa-da erbet tarapdan Animal
öwrülýärObýekte gönükdirilen programmirleme, miras we subtip ýazmak, ilkinji öwrenen diliňize baglylykda başga dillere terjime edilmeýän aýratyn manylary bolup biler. Java özüni Obýekte gönükdirilen dil hökmünde görkezýär we doly bukjany hödürleýär. Gitmek OO dili däl, ýöne ördek ýazmagyň üsti bilen subtip ýazmagy hödürleýär. Python aç-açan we aç-açan miras hödürleýär, ýöne interfeýs ýok.
Täze programmirleme dilini, eýýäm bilýänleriňiz bilen deňeşdirip öwrenýärsiňiz. Diliň aýratynlyklaryny bilmek, maksat diliňizde idiomatik kod ýazmagyň açarydyr. Belli dilleriňizde ýok aýratynlyklar bilen tanyşyň: umuman programmirleme düşünjäňizi giňelder.
Dowam et:
Ilki 2025-nji ýylyň 26-njy ýanwarynda “Java Geek” -de neşir edildi