Go OOP?
Címkék: oop go procedural golang procedúrális objektum orientált object oriented
2023.03.10. 11:43
A Go egy procedurális nyelv, nem objektum orientált.
És még is találtam több az alábbihoz hasonló megoldást.
package main
import (
"io"
"os"
"strings"
)type rot13Reader struct {
r io.Reader
}func (rd *rot13Reader) Read(b []byte) (n int, e error) {
n, e = rd.r.Read(b)
for i := 0; i < len(b); i++ {
c := b[i]
if (c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M') {
b[i] += 13
} else if (c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z') {
b[i] -= 13
}
}
return
}func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
Gyakran alkalmaznak ehhez hasonló megoldást a egység-tesztek során.
A Go-ban létezik a funkció
func function_name(Parameter-list)(Return_type){
// function body.....
}
és a metódus.
func (reciver_name Type) method_name(parameter_list)(return_type){
// method boby
}
Látható a különbség a reciver a fogadó. Azt olvasom itt: "A method in Golang is like a function that needs a receiver to get invoked. In simple words, a method is a function that is defined on struct types." Vagy is a funkció a reciver entitáson kerül végrehajtásra.
Hogy is van ez, a metódus a fogadó objektumon van értelmezve?
Nézzük a fenti példát. A rot13Reader struktúra rendelkezik az r egy az io:reader interfészt kielégítő objektum memeberrel. (Egy procedurális nyelvben valami kielégít egy interfészt?) A definált Read metodus fogadója egy rot13Reader típusú objektum. A metódus első tevékenysége, hogy meghívja az r field(?) Read (figyelem) metódusát. Majd a kapott eredményt átdolgozza.
Az én értelmezésemben ez az io.Reader read metódusának felülbírálása (override).
Akkor a Go használható objektum orientált szemléletben?
A Java is használható procedurálisan, static metódusok main metódusból való hívogatásával. A Java esetén érzem, hogy ez erőltetett. Nem is nagyon található ilyen érdemi példa. Míg a Go esetén lépten-nyomon látok az objektum orientáltságra hajazó megoldást.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.