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:

https://pharsan.blog.hu/api/trackback/id/tr3018068634

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.

Nincsenek hozzászólások.
süti beállítások módosítása