Klasa z dwoma argumentami pod interfejs

0

Witam,
mam plik z interfejsami, fragment wygląda tak:

<?php
interface Config
{
    /**
     * Dodaje nową kolumną do DataGrid.
     */
    public function addColumn(string $key, Column $column): Config;

    /**
     * Zwraca wszystkie kolumny dla danego DataGrid.
     */
    public function getColumns(): array;
}
?>

piszę klasę dla powyższego interfejsu.

class DefaultConfig implements Config
{
	/**
     * Dodaje nową kolumną do DataGrid.
     */
    public function addColumn(string $key, Column $column): Config
	{
        $this->column = $key; // $column ?

        return $this;
	}

    /**
     * Zwraca wszystkie kolumny dla danego DataGrid.
     */
    public function getColumns(): array
	{
		$array = array();
		
		return $array;	
	}
 . . .
 }

Kto wie jak powinny wyglądać klasy, co z metodą addColumn(string $key, Column $column): Config?
Są jakieś przykłady takiej metody, gdzie doczytać o co tutaj chodzi?

0

Mi się zdaje, że "poeta" chce się podszkolić w zakresie interface, żeby dodawać w kodzie "bo profesjonalnie wygląda" tylko nie wie jak. — leonpro778 dziś, 12:31

Zdanie poety przepełnia stos w moim paserze języka polskiego

artimman napisał(a):

Kto wie jak powinny wyglądać klasy, co z metodą addColumn(string $key, Column $column): Config?
Są jakieś przykłady takiej metody, gdzie doczytać o co tutaj chodzi?

Jeśli ekosystem PHP milczy co do wiedzy nt interfejsów *), to może szukać w Javie? Zwłaszcza, że syntax pehapowy jest w jakimś komple... podobieństwie do javowskiego
Nie moja specjalność, ale żebym widział milion dobrych solidnych wprowadzeń do OOP w PHP, to nie powiem ... a bez tego nie zrozumie "dlaczego tak", będzie się siłować z syntaxem, bez możliwości dopasowania do realnego życia.

https://medium.com/geekculture/why-do-we-need-interfaces-in-java-9a95ef57a156
https://www.tutorialspoint.com/what-is-the-purpose-of-interfaces-in-java

Jesli jedna z metod interfejsu na dwie metody razi, może to wskazówka, że jest to za szeroki interfejs.

Nazwa interfejsy rzadko jest rzeczownikiem, w Javie najczęściej imiesłowem wskazujacym na jedną zdolność (ang. końcówka -able). Widziałem konwencje "Having.."
Wiele, bardzo bardzo wiele interfejsów na tylko jedną metodę, ma to głębokie uzasadnienie, ale za długie na podawanie tego w poście.

Już pierwsza męka tutaj do zrozumienia "dlaczego", że mamy rzeczownik Config
To słaba (przynajmniej na gruncie dydaktyki) nazwa /założenia interfejsu - to bardziej prowadzi dla klasy (abstrakcyjnej czy nie, to inna sprawa)

*) Jeszcze z innej strony - użyłem słowa o kompleksach w stosunku do javy - w językach dynamicznych jest ZNACZNIE mniejsze zapotrzebowanie na interfejsy, i próba ich wprowadzenia może być nienaturalna.
Zbieżne z tradycjami tych języków jest dynamiczne niejawne dodawanie "imiesłowów" jak "kwaczący" (przez dynamiczne dodanie metody kwacz() )
https://devopedia.org/duck-typing

0

A po co Ci to w ogóle? Jeśli szukasz dobrego przykładu korzystania z polimorfizmu to to raczej nie jest to.

0

Poeta. Dobrze, że nie artysta, bynajmniej w tym przypadku. Dla uproszczenia można przyjąć, że Kowalski.
Programowałem w PHP strukturalne, następnie przerzuciłem się na obiektowe, ale w frameworkach np. Symfony,
wykonałem kilka ukończonych projektów, a teraz uznałem, że nie znam obiektowego czystego PHP, mogę kodować tylko w obiektowych gotowcach i chciałbym to zmienić, zrozumieć "o co chodzi" w czystym obiektowym PHP, stąd wziąłem zadanie do wykonania i jak widzę sam chyba nie dam rady tego opracować.
Czy jest tu ktoś, kto może pomóc w opracowaniu tego zadania?

1

@artimman: A z czym masz dokładnie problem? Bo na razie ten temat nadaje się do "ogłoszenia".

0

Do ogłoszenia? Rozumiem, że mam talent. No tak przecież jestem oryginalnym blondynem...
Mniejsza o to zadanie, najgorsze już zrobione, z resztą też dam sobie radę.

0
artimman napisał(a):

Poeta. Dobrze, że nie artysta, bynajmniej w tym przypadku. Dla uproszczenia można przyjąć, że Kowalski.
Programowałem w PHP strukturalne, następnie przerzuciłem się na obiektowe, ale w frameworkach np. Symfony,
wykonałem kilka ukończonych projektów, a teraz uznałem, że nie znam obiektowego czystego PHP, mogę kodować tylko w obiektowych gotowcach i chciałbym to zmienić, zrozumieć "o co chodzi" w czystym obiektowym PHP, stąd wziąłem zadanie do wykonania i jak widzę sam chyba nie dam rady tego opracować.
Czy jest tu ktoś, kto może pomóc w opracowaniu tego zadania?

Wygłaszasz sprzeczne zdania.
Z jednej chciałbyś kontakt z dobrym OOP, z drugiej dajesz jakiś wyjęty z kontekstu, ale raczej zły niż dobry przykład, który traktujesz jako zadanie, które musisz wykonać.

We frameworkach powstaje kod dziwny, związany z wymaganiami / tradycjami frameworku, ale niekoniecznie wysokiej jakości z p. widzenia ogólnego designu obiektowego.
Skąd pochodzi ten fragment?

a teraz uznałem, że nie znam obiektowego czystego PHP, mogę kodować tylko w obiektowych gotowcach i chciałbym to zmienić, zrozumieć "o co chodzi"

A to się da "programować w obiektowych gotowcach" ??? Programowanie obiektowe, to intensywne tworzenie własnych obiektów (być może w powiązaniu z zewnętrznymi). Więc "programowanie w gotowych obiektach" to nie programowanie obiektowe - w jakimś sensie. Ja jestem czuły na takie słowka, bo np Borlandy/Embecadero, będą środowiskami obiektowymi, fakt - statystycznego delikwenta nie uczą programownaia obiektowego (a wręcz oddalają)

Sądzę, ze ścieżka na jaką wlazłeś nie prowadzi do celu.

zrozumieć "o co chodzi" w czystym obiektowym PHP, stąd wziąłem zadanie do wykonania i jak widzę sam chyba nie dam rady tego opracować.

Bo zrozumienie nt nowego paradygmatu (i dobry styl) się nie bierze z praktyki, tylko z teorii. Co teoretycznego czytałeś o programowaniu obiektowym ?

Mniejsza o to zadanie, najgorsze już zrobione, z resztą też dam sobie radę.

Rzecz w tym, że mogłeś to zrobić w niskiej jakości designu obiektowego - i niczego dobrego nie nauczyło, a wręcz przeciwnie.

1

Tak powinny wygladac klasy, sory ni emoglem sie powstrzymac
image

0
ZrobieDobrze napisał(a):

Rzecz w tym, że mogłeś to zrobić w niskiej jakości designu obiektowego - i niczego dobrego nie nauczyło, a wręcz przeciwnie.

Wiesz, że tego nie zrobi się dobrze w 15 minut. Czyżbyś chciał nauczyć programowania obiektowego, czy tylko tak piszesz?
Ok, może zacznijmy od początku, od czego byś zaczął?

0
artimman napisał(a):
ZrobieDobrze napisał(a):

Rzecz w tym, że mogłeś to zrobić w niskiej jakości designu obiektowego - i niczego dobrego nie nauczyło, a wręcz przeciwnie.

Wiesz, że tego nie zrobi się dobrze w 15 minut. Czyżbyś chciał nauczyć programowania obiektowego, czy tylko tak piszesz?
Ok, może zacznijmy od początku, od czego byś zaczął?

Od dobrego kompletnego podręcznika (nie podam jakiegoś tytułu - w praktyce trudno ignorować wkład ekosystemu Javy w upowszechnienie OOP).
Na pewni nie przypadkowe ogryzki z internetu.

Potem drugi o obiektowych wzorcach projektowych (te będą mało zalezne od jezyka)

2

@artimman: powiem Ci tak. Próbowanie robienia zadań o klasach i obiektach nic Ci nie da.

To co powinieneś moim zdaniem zrobić, to znaleźć jakiś swój kod już gotowy, bez klas, i próbować dodać klasy tam gdzie to ma sens.

Skąd będziesz wiedział gdzie ma sens? No tu by się przydał jakiś nauczyciel.

Bez sensu Ci jest tutorial, o składni klas i instancjach obiektów, jeśli nie będziesz wiedział jak ich odpowiednio użyć, i będziesz tworzył spaghetti z klasami żeby tylko użyć klas.

0

czemu tak na sile chcecie robic obiektowo? a co to juz strukturalnie to co? nie łska juz robic?

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