Wątek przeniesiony 2022-06-21 17:19 z Kosz przez Adam Boduch.

Strategia w programowaniu obiektowym

0

Dekorator może przyjąć obiekt, który przyjmuje np int albo string, powiedzmy.

Może, ale nie musi, tak samo jak i strategia.

Czy jest użyte słowo class w kodzie?" - jeśli tak, to według @omenomn2 kod jest obiektowy.

Tylko, że to słowo class nie zostaje użyte od czapy, ono coś oznacza.

Jego wystąpienie nie jest warunkiem wystarczajacym, żeby możnabyło coś nazwać paradygmatem obiektowym.

Ale to co się za nim kryje już tak.

Jeżeli szukasz, czegoś co definiuje ostatecznie to czy kod jest obiektowy, to idziesz złym tropem, bo to na pewno nie jest wypełniony konstruktor w każdym jednym przypadku.

0
omenomn2 napisał(a):

Jego wystąpienie nie jest warunkiem wystarczajacym, żeby możnabyło coś nazwać paradygmatem obiektowym.

Ale to co się za nim kryje już tak.

Nie.

Chociażby dlatego że w klasie możesz mieć funkcje statyczne, które z definicji są obiektowe. Więc nie - "Samo to że mam class nie jest wystarczające, żeby nazwać kod obiektowym". Musisz spełnić więcej wymagań.

1

Chociażby dlatego że w klasie możesz mieć funkcje statyczne, które z definicji są obiektowe. Więc nie - "Samo to że mam class nie jest wystarczające, żeby nazwać kod obiektowym". Musisz spełnić więcej wymagań.

Są wzorce obiektowe, które wykorzystują funkcje statyczne.
Serio masz jakiś wypaczony obraz tego czym jest programowanie obiektowe, nawarstwiło Ci się na nie za wiele wymagań.

0
KamilAdam napisał(a):

Ale nie rozmawiamy o tym czy to za dużo tylko o tym czy string jest obiektem. A skoro jest obiektem (jak sam powiedziałeś) to pierwszy kod też jest obiektowy (albo twoja definicja jest błędna)

tylko o tym czy string jest obiektem - to co tutaj piszesz, moim zdaniem, to jest używanie słowa "obiekt" w kontekście tego czy coś jest obiektem w filozofii języka.

Jasne, w Javie jeśli coś spełnia x instanceof Object, to w filozofii Javy jest obiektem. Poodbnie w innych językach. Języki nas nauczyły, że w ramach "swojej logiki" niektóre rzeczy są obiektem, inne nie. I jeśli coś jest jakiegoś typu, jak np Object, String, etc. to że takie coś jest lub nie jest obietem.

str w Pythonie, sam w sobie może być obiektem (pythonowym jak i OOP). Ale inne obiekty mogą go użyć niezgodnie z paradygmatem obiektowym.. Wtedy ten kod nie będzie obiektowy.

6

@Riddle: To dzielisz obiekty na lepsze i gorsze? W kraju, który tyle wycierpiał z powodu wojny?

A w temacie, czy kod:

class PictureWriter(val pictureEncoder:PictureEncoder){
  fun savePicture(File pictureFile){
    when(pirtureFile.extension){
      when "png" -> pictureEncoder.imageFormat = PngEncoder()
      when "jpg" -> pictureEncoder.imageFormat = JpegEncoder(quality=80)
    } 
    writeFile(pictureFile, pictureEncoder.encode(pictureFile.bytes))
  }
  private fun writeFile(....)
}

Jest według ciebie obiektowy, czy nie jest? Albo czy jest dla jpg (bo strategia przyjmuje parametr), ale nie jest dla png?

0
omenomn2 napisał(a):

Chociażby dlatego że w klasie możesz mieć funkcje statyczne, które z definicji są obiektowe. Więc nie - "Samo to że mam class nie jest wystarczające, żeby nazwać kod obiektowym". Musisz spełnić więcej wymagań.

Są wzorce obiektowe, które wykorzystują funkcje statyczne.
Serio masz jakiś wypaczony obraz tego czym jest programowanie obiektowe, nawarstwiło Ci się na nie za wiele wymagań.

Znowu, używasz okreslenia "obiektowe" w znaczeniu "tego czy ma klasy czy nie". Nie, nie ma szans żeby kod który operował na funkcjach statycznych był obiektowy. (przynajmniej nie w paradygmacie obiektowym).

Jeśli Ty używasz okreslenia "obiektowy", i w tym określeniu możesz mieć kod który ma funkcje statyczne

TO NA PEWNO MÓWISZ O CZYMŚ INNYM, NIŻ TO O CZYM JEST TEN WĄTEK

3
Riddle napisał(a):

Ale inne obiekty mogą go użyć niezgodnie z paradygmatem obiektowym..

Ale co to jest ten paradygmat?
I jak wygląda użycie obiektu niezgodnie z paradygmatem obiektowym?

0
jarekr000000 napisał(a):

Ale Twoja definicja nic nie mówiła o mieszaniu poziomów abstrakcji - mówiła tylko czy można (coś tam, coś tam obiektem) - i pokazałeś, że można.

Mówiła:

Sam to napisałeś nawet:

Riddle napisał(a):
jarekr000000 napisał(a):
Riddle napisał(a):

Kod wtedy jest obiektowy, kiedy dane przekazywane pomiędzy różnymi, bliskimi poziomami abstrakcji (i nie mam tu na myśli metod abstrakcyjnych), może być przedstawiona conajmniej jednym obiektem, który przyjmuje ten dane przez konstruktor.

@Riddle: Czyli każdy kod jest obiektowy? Czy też masz kontrprzykład kiedy dane przekazywane pomiędzy różnymi, bliskimi poziomami abstrakcji (i nie mam tu na myśli metod abstrakcyjnych), NIE MOGĄ być przedstawiona conajmniej jednym obiektem, który przyjmuje ten dane przez konstruktor.

Zapytałeś czy mam kontrprzykład, i ja wtedy pokazałem dwa kody. Jeden obiektowy, jeden nie.

0

Kod wtedy jest obiektowy, kiedy dane przekazywane pomiędzy różnymi, bliskimi poziomami abstrakcji (i nie mam tu na myśli metod abstrakcyjnych), może być przedstawiona conajmniej jednym obiektem, który przyjmuje ten dane przez konstruktor.

Pomijając to że jak czytam tę definicję to mi mózg krwawi bo jest napisana niegramatycznie, to nie ma zdefiniowane bliskimi poziomami abstrakcji. Czy mam rozumieć że str i Filename są daleko poziomami abstrakcji?

0
KamilAdam napisał(a):

Kod wtedy jest obiektowy, kiedy dane przekazywane pomiędzy różnymi, bliskimi poziomami abstrakcji (i nie mam tu na myśli metod abstrakcyjnych), może być przedstawiona conajmniej jednym obiektem, który przyjmuje ten dane przez konstruktor.

Pomijając to że jak czytam tę definicję to mi mózg krwawi bo jest napisana niegramatycznie, to nie ma zdefiniowane bliskimi poziomami abstrakcji. Czy mam rozumieć że str i Filename są daleko poziomami abstrakcji?

Nie. "wyciąganie extensiona" i "wyciąganie mime-type" są odległymi poziomami abstrakcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1