Come programmare per vincoli / regole

6

Prima di tutto, durante le interviste in passato, molte volte mi è stato chiesto di progettare alcune o altre varianti del gioco di carte come puzzle di programmazione, e ho provato a progettarlo in modalità OO, ma non sono mai stato soddisfatto le mie soluzioni. Tuttavia non è stato fino a poco tempo fa che ho capito che mi stavo avvicinando al problema dalla direzione sbagliata. In particolare stavo cercando di risolvere il problema modellando la singola carta come oggetto.

Il problema con questo è che le singole carte non hanno alcun comportamento intrinseco non banale e quindi non sono candidate (o primarie) idonee come oggetti. Ciò che è interessante e importante delle carte sono regole e vincoli, come potrebbero esserci solo quattro semi , o solo tredici carte per seme. Certo, poi ci sono un numero qualsiasi di regole per i giochi.

Quindi le mie domande sono

  1. Ci sono degli idiomi / costrutti / schemi da programmare per regole e amp; vincoli.
  2. Quanti in 1 possono essere applicati in congiunzione con il paradigma OO.
posta Gaurav 01.01.2011 - 21:47
fonte

2 risposte

2

Queste linee guida / idiomi sono chiamate Programmazione vincolata, cosa non facile da fare. È usato per modellare e risolvere problemi combinatori (NP-hard, NP-complete). Posso consigliarti un libro: Principles of Constraint Programming . Questo libro è uno dei migliori libri sull'argomento, ma, ancora, dopo averlo letto, non sarà ancora possibile applicarlo nella pratica.
Ma sarai in grado di farlo familiarizzando con Gecode - un toolkit per lo sviluppo di sistemi e applicazioni basati su vincoli. Gecode fornisce un risolutore di vincoli con prestazioni allo stato dell'arte pur essendo modulare ed estensibile.
Posso dire che questo argomento è molto interessante, direi uno dei migliori corsi che ho avuto durante i miei studi. Btw, l'autore di Gecode, era il mio professore, quindi sono stato molto fortunato:)

    
risposta data 01.01.2011 - 22:22
fonte
2

Tendo a trovare questo tipo di problema quando utilizzo oggetti poco o dto 'muti'.

In tal caso, ho trovato il mio codice usando oggetti di tipo servizio, solitamente separati da livelli come presentazione / logica / persistenza. Ogni livello serve (o consuma) un (set) di dto.

Un altro approccio che mi piace è usare contenitori intelligenti. Creo un contenitore (come un elenco specializzato) che applica le regole. Quindi potrei avere un mazzo che ha 52 carte e una mano di poker che ha 5 carte, in cui una mano di poker può avere 'isFullhouse' per modellare cosa sia un full house. Un PokerGame avrebbe 1 mazzo e 4 mani di poker. L'oggetto della carta rimane banale (o stupido), mentre i contenitori sono più orientati al comportamento (intelligenti).

    
risposta data 01.01.2011 - 22:32
fonte