Autor Zpráva
Chris Brown
Profil *
ktoré riešenie je správne?

a):

class Element
{
   function getName() { ...
   function getCildren() { ...
   function parse($code) { ...   
   ...
}

b):

class Element
{
   function getName() { ...
   function getCildren() { ... 
   ...
}

class ElementParser
{
   function __construct($code) { ...
   function parse() { ... 
   ...
}
ShiraNai7
Profil
Podle mě to druhé. Element sám o sobě nemá s parsováním nic společného. (A předpokládám, že tam není deklarace viditelnosti, protože se jedná jen o příklad).
Jan Tvrdík
Profil
Chris Brown:
První příklad velmi pravděpodobně porušuje Princip jedné odpovědnosti (Single responsibility principle).

Druhý příklad by měl parametr $code přijímat spíš jako argument metody parse. Parser tak nebude jednorázový stroj, ale bude možné ho použít opakovaně.
Chris Brown
Profil *
A co ak mam viac jazykovych elementov ako jasne deklarujem ze 2 objekty patria k sebe. Napr.:

class ElementA
{
  ...
}
 
class ElementAParser
{
   ...
}

class ElementB
{
  ...
}
 
class ElementBParser
{
   ...
}

class LanguageParser
{
   function ParseAllElements() ..
}



Aby bol proste v na prvy pohlad jasny vztah medzi dvomi objektami?
Chris Brown
Profil *
Nikto nevie?

Btw. riesit niektore problemy objektovo je imho cesta do pekiel, nakoniec som to riesil funkcionalne

1. Zdrojovy kod jazyka som previedol na pole tokenov.

2. potom som si vytvoril pole transformacnych pravidiel kazde transformacne pravidlo pozostavalo z nazvu tokenu a dvoch first class funkcii parser a generator podla nazvu tokenu sa vybrali prislusne transformacne funkcie, funkcia parser mi previedla token na uzol (Node) a generator mi previedol kazdy uzol rekurzivne na vystupny kod.
ShiraNai7
Profil
Chris Brown:
Btw. riesit niektore problemy objektovo je imho cesta do pekiel

Nesmysl.
Joker
Profil
Chris Brown:
Btw. riesit niektore problemy objektovo je imho cesta do pekiel
Nikoli. Potíž je v tom, že řešíte problém v paradigmatu, kterému pořádně nerozumíte. O které paradigma jde už je druhořadé.

nakoniec som to riesil funkcionalne
Spíš asi procedurálně, funkcionální programování v PHP by bylo hodně exotické.

K příkladu v [#4]:
Možná nikdo tak dlouho nereagoval proto, že ten příklad je špatně představitelný. Já třeba nechápu, proč by každý element měl svůj parser.
Spíš bych očekával jeden parser, který bude dokument přepracovávat na nějakou strukturu elementů.
Ale pokud jde o modelování vztahů mezi objekty, dá se to:
• Děděním, pokud jedna třída je specializací jiné třídy.
• Skládáním, kdy objekt nějaké třídy v sobě obsahuje objekt jiné třídy.
• Pomocí rozhraní, kdy třídy jen obsahují nějakou společnou funkčnost.

Zdrojovy kod jazyka som previedol na pole tokenov. potom som si vytvoril pole transformacnych pravidiel kazde transformacne pravidlo pozostavalo z nazvu tokenu a dvoch first class funkcii parser a generator podla nazvu tokenu sa vybrali prislusne transformacne funkcie, funkcia parser mi previedla token na uzol (Node) a generator mi previedol kazdy uzol rekurzivne na vystupny kod.
Z tohohle popisu to vypadá, že ten zde uvedený objektový model situace byl jednoduše špatně.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: