[c++] Bygga "riktiga" program, tips och råd önskas!?

Permalänk
Medlem

[c++] Bygga "riktiga" program, tips och råd önskas!?

Hej,
Har läst mycket om c++-grunder och liknande, har även skrivit ett ganska rejält program som leker lite med en databas.
Nu känner jag dock att det står lite still, kommer på saker jag vill programmera men känner att kunskapen inte riktigt räcker till.

Så, vad menar jag med riktigt program?
Ett program som använder sig av ett användargränssnitt (GUI) för att presentera information och som man använder för kommunikation med programmet.
De program jag har i baktanke använder också en databas för att spara och hämta information.

Här står det dock ganska still, det verkar finnas en myriad av olika databaser, klasser som hanterar databaser och APIn för att skapa UI för en mängd olika datorsystem.
Finns det något som är störst, bäst och vackrast för databashantering och användargränssnitt?

Jag tänker mig att jag bygger en virtuell fönsterklass som har alla typer av fönster-operationer jag behöver, ex:

class windowInterface{ virtual infoBox(int, int){}; virtual dialogBox(int, int){}; virtual button(int, int){}; }

Sedan använder jag plattformsberoende APIn för att skapa en klass baserad på windowInterface typ:

class windows_WI : public windowInterface{ virtual newWindow(int width, int height){ windowsAPI->makeNewWindow(width, height); } virtual newPopUp(int width, int height){ windowsAPI->makeNewPopUpWindow(width, height); } virtual newButton(int width, int height){ windowsAPI->createButton(width, height); } } class unix_WI : public windowInterface{ /***/ }

Sedan skapar jag en pekare av typen windowInterface* wndwPtr; och hanterar mina fönster genom den.
Låter det som en vettig approach?

Men, huvudproblemet är alltså var jag ska börja, vilka APIn ska jag lägga ner tid på att lära mig för databaser och GUI-skapande?
Jag har lärt mig lite ODBC då jag skrev mitt förra program, enligt msdn ska det vara plattformsoberoende men det kanske finns något som har mer utbrett stöd?

Finns det någon litteratur om ämnet?

Tacksam för alla tips och råd om vart jag ska börja!
Använder Microsoft Visual C++ 2008 express och programmerar i windowsmiljö, har dock tillgång till freeBSD på bärbara datorn.
//pscs3

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Hedersmedlem

Qt är trevligt till mycket.
http://qt.nokia.com/

Permalänk
Medlem

Qt är intressant, verkar kul att kunna utveckla till mobil.
Hur utbrett är Qt jämfört med andra alternativ?
Eller vad arbetar man mycket med på företag? (kanske är väldigt varierat iofs)

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Medlem

QT är väldigt stort. (det låter som det perfekta valet för dig)
Det, samt Java Swing är det vanligaste jag hittat bland kommersiella program.

Permalänk

För UI kanske du kan kika på http://www.wxwidgets.org/ som alternativ till QT.

Det är ganska fruktansvärt att programmera GUI med winapi så jag rekommenderar att du använder något tredjeparts API.

För databasen kan man väll antingen använda ett abstraktionslager som ODBC men du kan ju också programmera direkt mot en databas. Jag skulle vilja rekommendera http://www.sqlite.org/.

Permalänk
Avstängd

Hur menar du med att du behöver tips? Behöver du tips på fönsterhanterare, eller hur man designar program? Du känner till treskiktsmodellen med GUI-logik-databas va?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av saddam
Hur menar du med att du behöver tips? Behöver du tips på fönsterhanterare, eller hur man designar program? Du känner till treskiktsmodellen med GUI-logik-databas va?

Vad för SDKs/APIn som används ofta och som passar,
tips på böcker/sidor som passar att läsa för att komma över tröskeln,
vad jag kan tänkas sakna för kunskap för att bygga riktiga program.

Tresiktsmodellen verkar vara ungefär det jag försöker bygga efter. Fast jag brukar tänka MVC från mitt phpande.

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Avstängd

Jag kan rekommendera treskiktsmodellen:

Antag du har gjort ett GUI fönster med diverse knappar och funktionalitet. Kanske en knapp "lägg till ny användare" eller "beräkna ränta" eller vad du vill för funktionalitet som ditt program gör.

I GUI har du en enda referens till logik lager klassen, som heter "logicClass". När användaren trycker på knapp "beräkna ränta" så ska något hända, så i lyssnaren till den knappen så gör du "logicClass->calculateInterestRate(args)". args har du hämtat från diverse textfält från GUI fönstret. Detta är allt som GUI:t gör. GUIt gör inga beräkningar, den bara display info från logikklassen.

I logikklassen har du en funktion som heter "int calculateInterestRate(args)". Den kommer nu att göra en beräkning. För att få alla data den behöver så behöver den gå ned till databas klassen, så den har en enda referens till DB klassen. Så nåt i stil med
int calculateInterestRate (args v)
{
DBclass->getInformation (args x)
do some calculation
return answer
}

Och i databasklassen så har du massa tabeller och funktioner. Du har en funktion som heter getInformation() och den itererar över tabeller och extraherar information och returnerar infon. Den gör inga beräkningar alls, den bara returnerar information. Alla beräkningar ska ske i logiklagret.

Exempel: du vill lägga till en ny användare. I GUI har du en knapp "add user", när man trycker på den så öppnas ett formulär upp och du fyller i all info som namn, adress, etc. När man trycker på "ok" så utförs koden i knappens lyssnare:

GIU::buttonListener
{
plocka ut namn från textfältet
plocka ut adress från textfält
plocka ut personr från textfält
...
if (logicClass->createUser (namn, adress, personnr) != success)
error
else
ok
}

Och i logicClassen görs själva arbetet, där skapas användaren.
int logicClass::createUser(namn, adress, personnr)
{
User p = new User (namn, adress, personnr);
DBClass->storeUser(p);

User checkIfUserIsOk = DBClass->getUser(p.personnr);
if (checkIfUserIsOk != p)
return error "could not create user in DB";
else
return sucess
}

och i logik lagret så har du en metod som heter createNewUser och tar emot en user objekt och stoppar in den i user tabellen. Och du har en annan metod som heter getUser (personnr) som utifrån ett personnr, tar ut personen och returnerar det objektet.

Ett tips; i databas tabellerna så ska varje klass ha ett nr som unikt id. Typ, har du nån klass som heter "rum" som heter "rum41", så ska klassen "rum" ha ett nummer id. Därför att i framtiden så kanske rummet ändrar nummer. Då blir det ett jävla meck om du har id på namnet istället för ett nummer. Så varje klass i DB bör ha ett nr som id.

Tips 2: Det viktigaste av allt är datamodellen, dvs databas tabellerna och hur klasserna hänger ihop - så detta är det allra första du börjar med. Designa klasserna och databastabellerna väl. Designfas.
Sen, kodfas: börja implementera ett GUI fönster. Sen skapar du en funktion i logikklassen för varje funktion som GUI har. Sen skapar du funktioner i databasklassen som returnerar all info till logikklassen. GUI får inte ha en referens till databas klassen, får inte kunna accessa databasklassen på något sätt, GUI måste alltid gå via logiklagret ned till DB.

Du bör använda try catch istället för att returnera int värden.

Var det typ sån här info du ville ha?

EDIT: ändrade lite i koden till logicClass::createUser

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av saddam
[...]
Var det typ sån här info du ville ha?

Ja, typ. Det är ungefär som du beskrivit som jag tänkt lägga upp det.
Mer specifikt tänkte jag tips om olika SDKs/APIn som är välkända och ofta används inom seriösa projekt.

Tack för tipsen!
//pscs3

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<