Close
Duke shfaqur rezultatin -9 deri 0 prej 8
  1. #1
    i/e regjistruar Maska e SemmY
    Anëtarësuar
    07-11-2006
    Vendndodhja
    Croatia
    Postime
    3

    C++: Detyrë për një databazë fluturimesh

    Jam student i shkencave kompjuterike po nuk kam shume eksperienc ne C++ po kam hasur ne dilem.
    Me duhet nje ndihme rreth definimit te klase per kete problem.

    Ja ketu po e pershkruaj se cka po kerkohet:

    Duhet ta implementoj nje baze me lokacione gjeografike te aeroporteve dhe linjeve ne mes tyre dhe nje bashkesi funksionesh te cilet do ti mundesojn shfrytezuesit qe te maipuloje me linjet ne mes tyre.

    Lokacionet gjeografike jan te shkruara ne nje skedar i cili permban rreshta me informata ne kete menyre:

    Lokacionet.txt

    ZAG 45.73458 16.06295
    BRU 50.901702 4.483025
    LHR 51.469883 -0.4448144
    PRG 50.101607 14.256674
    TLL 41.416521 24.799303
    FRA 50.11222 8.68194
    BER 52.52222 13.29750



    Ne baze te ketyre informatave programi jone duhet ti llogaris largesit ajrore ne mes tyre.
    Linja ajrore eshte cift i cregullt i dy aeroporteve.

    Funksionet qe vine parasysh:

    loadAirports filename
    lexon informata nga skedari filename ne rastin tone lokacionet.txt

    setFlights option[filename]
    vendon informate ne lidhje a egzoston linje ne mese aeroporteve

    option munde ti kete kto vlera
    -file ( lexon te dhenat nga skedari )
    -random ( vendon linje ne mes dy aeroporteve rastesisht )
    -all ( vendon linje ne mes te secilit aeroport )
    -none (vendon qe to mos ket linje ne mes aeroporteve )

    filename paraqet emrin e skedarit i cili lexohet kur option = file (nuk jepen te dhena tjera per argumentin option)

    addFlight source destination
    shton (nese nuk egziston ) linje ne mes aeroportit source dhe destination

    removeFlight source destination
    fshine (nese nuk egziston ) linje ne mes aeroportit source dhe destination

    getFlight from | * to | *

    getFlight from to shtyp a egziston linje ne mes aeroportit from dhe to nese po ateher e shtyp largesin e tyre

    getFlight from * shtype te gjitha linjet direkte qe nisen nga aeroporti from, dhe largesin e tyre

    getFlight * to shtype te gjitha linjet direkte te cilat mbrin te aeroporti to, dhe largesit e tyre

    getFlight * * shtype te gjitha linjet direkte ne mes cifteve te aeropoerteve, dhe largesit e tyre


    shortestConnection from | * to | *

    shortestConnection from to shtype linjen me te shkurtur me mes from dhe to, dhe largesin e tyre

    shortestConnection from * shtype linjen me te shkurtur deri tek te gjithe aeroporteve tek te cilet
    mund te arihet nga aeroporti from, dhe largesit e tyre

    shortestConnection * to njejte si koj me lart vec e kunderta

    shortestConnection * * shtype linjet me te shkurta ne mes cifteve te aeroporteve, dhe largesite e tyre


    shortestRoundtrip a_1,....a_n | all
    shortestRoundtrip a_1,....,a_n shtype linjen e cila i pershkon te gjith aeroportet nga bashkesia
    { a_1 ,...., a_n } vetem nje her, dhe largesin
    shortestRoundtripAll shtype linjen me te shkurtur e cila i pershkon aeroportet vetem nje her


    P.sh.

    Input:loadAirports lokacionet.txt
    setFlights all
    removeFlight ZAG TLL
    removeFlight BRU TLL


    Input: getFlight ZAG *

    Output: ZAG -> BRU : 1029.34 km
    ZAG -> LHR : 1367.11 km
    ZAG -> PRG : 503.86 km

    Input: shortestConnection * TLL

    Output: BRU -> PRG -> TLL : 1930.3 km
    LHR -> TLL : 1805.29 km
    PRG -> TLL : 1233.88 km
    ZAG -> PRG -> TLL : 1737.74 km

    Input:shortestRoundtripAll

    Output: ZAG -> BRU -> LHR -> TLL -> PRG -> ZAG : 4921.74 km


    Duhet ti perdori krejt tiparet e Object Programming d.th.m trashigimija, alocimi i memories..
    Munde edhe ty shfrytezoj edhe template si vector, map, set etj..
    E kam bashakngjitur edhe nje skedar ci cili llogarit largesin ne mes dy pikave ne globe.

    Ju falenderoj te gjithe te cilet gjeni koh per te me ndimuar.
    Do tju lutesha qe me sugjerimet tuaja te pergjigjeni ma shpejt se te premten 08.02.2007 duhet te dorzoj projektin.
    Skedarët e Bashkëngjitur Skedarët e Bashkëngjitur

  2. #2
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Një program i mirëfilltë që plotëson të gjitha kërkesat e mësipërme do kërkonte të paktën 2-3 javë punë. Shpresoj të jetë me disa faza detyra se vështirë do e kesh të përfundosh gjithçka brenda një jave.

    Më poshtë kam hedhur një skelet klasash për programin në C++, por po të shpjegoj edhe logjikën që ndoqa për të dizajnin.

    Dizajni

    Fillojmë nga elementi më i thjeshtë, PikeGjeografike dhe vazhdojmë me deklarimin e enteve Aeroport dhe Fluturim. Aeroporti përbëhet nga një pikë gjeografike me një emër. Fluturimi përbëhet nga aeroporti i nisjes dhe ai i arritjes.

    Më pas vazhdojmë me klasat AeroportParser dhe FluturimParser të cilat lexojnë të dhënat e formatuara dhe kthejnë një listë përkatësisht me Aeroporte ose Fluturime. Në metodat e këtyre klasave do lexosh rreshtat një nga një, do t'i copëtosh në njësi më të vogla të cilat do i përdorësh më pas për të krijuar një Aeroport ose Fluturim të ri.

    Entet e të dhënave Aeroport dhe Fluturim duhet t'i ruajmë diku, qoftë në ndonje strukturë të dhënash në memorje, ose një skedar, databazë, etj. Për të bërë programin sa më elastik/fleksibël për të ardhmen, përdorim modelin Data Access Object (DAO) dhe krijojmë AeroportetDAO dhe FluturimetDAO. Këto klasa abstraktojnë ruajtjen dhe hapjen e Aeroporteve dhe Fluturimeve duke na lejuar që t'i zëvendësojmë me vonë sipas dëshirës pa ndryshuar kodin që i thërret ato.

    Deri tani kemi krijuar disa ente me informacion, por na duhet një ent tjetër që do menaxhojë entet me informacion për plotësimin e kërkesave të biznesit. Këto detyra ua ngarkojmë enteve të biznesit, AeroportetManager dhe FluturimetManager. Pra, menaxheri bën lidhjen midis anës së biznesit (klientit, përdoruesit) dhe asaj të informacionit; Klienti bën porosinë/kërkesën dhe Menaxherit e plotëson duke pëpunuar informacionin që zotëron (në këtë rast Aeroportet dhe Fluturimet).

    Duke vazhduar të analizojmë modelin e biznesit, mund të shikojmë një farë hierarkie midis Menaxherit të Fluturimeve dhe Menaxherit të Aeroporteve. Për këtë arsye e kemi bërë Menaxherin e Aeroporteve vartës të Menaxherit të Fluturimeve në klasën FluturimetManager. Pra, nëse Menaxheri i Fluturimeve ka nevojë për të kryer një detyrë për aeroportet, ia delegon këtë detyrë Menaxherit të Aeroporteve.

    Le të marrim një shembull për të kuptuar rrjedhjen e ekzekutimit.

    Rrjedhja e ekzekutimit: Përdoruesi ngarkon Aeroportet nga skedari aeroportet.txt

    1. main() ia jep komandën ngarkoAeroportet skedari KomandëEkzekutuesit
    2. KomandëEkzekutuesi thërret FluturimetManager.ngarkoAeroportet(string & skedari)
    3. FluturimetManger thërret AeroportManager.ngarkoAeroportet(string & skedari)
    4. AeroportManager hap skedarin dhe thërret AerportParser.parseAeroportet(istream & teDhenat)
    5. AeroportParser thërret istream.get_line(), krijon një PikeGjeografike, dhe pastaj një Aeroport
    6. AeroportManager merr Aeroportet e kthyer nga AeroportParser dhe thërret AeroportetDAO.shtoAeroportin() për të gjithë aeroportet.
    7. AeroportetDAO thërret _aeroportet.put(emri, aeroporti)



    Ndërtimi i objekteve

    Deri tani s'kemi shpjeguar se si do krijohen dhe do lidhen entet e përmendur më lart. Ka dy mënyra për të bërë këtë gjë:

    I. Mënyra e parë është që në main() të krijojmë vetëm FluturimetManager; pastaj FluturimetManager krijon FluturimetDAO dhe AeroportManager; AeroportManager krijon AeroportDAO. Pra, klasat krijojnë vartësit e tyre.

    II. Mënyra tjetër është që një klasë e vetme (ose në main()) të krijojmë të gjitha klasat dhe t'i lidhim me njëra tjetrën duke i kaluar vartësit si argumente tek ndërtuesit (constructors).

    Që të dyja mënyrat kanë të mirat dhe të ligat për të cilat nuk po zgjatem më tej sepse do dilja jashtë teme. Mendoj se mënyra e dytë është më lehtë për fillestarët e C++.

    Vër re se parser-at nuk kanë nevojë të krijohen sepse thërriten në mënyrë statike.


    Kodi në C++

    Kodi PHP:
    // Klasa për të prezantuar një pikë gjeografike
    class PikeGjeografike {
      private: 
         
    double _gjeresia
         
    double _gjatesia;  
      public: 
         
    PikeGjeografike(double gjeresiadouble gjatesia); 
         
    double merrGjeresia() const; 
         
    double merrGjatesia() const; 
    }; 
    Kodi PHP:
    // Klasa për të prezantuar një aeroport
    class Aeroport {
      private:
        
    string _emri
        
    PikeGjeografike _vendndodhja;  
      public: 
         
    Aeroport(string emriPikeGjeografike vendndodhja); 
         
    Aeroport(string emridouble gjeresiadouble gjatesia); 
         
    string merrEmri() const; 
         
    PikeGjeografike merrVendndodhjen() const; 
    }; 
    Kodi PHP:
    // Klasa për të prezantuar një Fluturim 
    class Fluturim {
      private:
        
    Aeroport _vendnisja
        
    Aeroport _vendarritja
      public: 
        
    Fluturim(Aeroport vendnisjaAeroport vendarritja); 
        
    Aeroport merrVendnisja() const; 
        
    Aeroport merrVendarritja() const;
        
    int merrDistancen() const; 
    }; 
    Kodi PHP:
    // Klasa për leximin e një skedari me aeroportët
    class AeroportParser {
      public: 
        
    // lexon nje istream dhe kthen një map<emri, aeroporti> me aeroporte
        
    static map<stringAeroport *> parseAeroportet(istream teDhenat);
      
    }; 
    Kodi PHP:
    // Klasa për leximin e një skedari me fluturimet
    class ParseFluturimet {
      public: 
        
    // lexon nje istream dhe kthen një liste/vektor me fluturime
        
    static vector<Fluturim *> parseFluturimet(istream teDhenat);
      
    }; 
    Kodi PHP:
    // Klasa për veprimet elementare për shtimin, fshirjen, dhe gjetjen e 
    // aeroporteve
    class AeroportetDAO {
      private:
        
    // mund të jetë vektor, map, ose një burim të dhënash (data source) 
        // e lidhur me databazën
        
    map<stringAeroport *> * _aeroportet
        
      public: 
        
    AeroportetDAO();
        
    AeroportetDAO(map<stringAeroport *> aeroportet);
      
        
    // Shton aeroportin e dhenë në databazë
        
    void shtoAeroportin(Aeroport aeroport); 
        
        
    // Fshin Aeroportin e dhënë nga databaza
        
    void fshiAeroportin(Aeroport aeroport); 

        
    // Kthen Aeroportin me emrin e dhënë ose NULL nëse nuk ekziston
        
    Aeroport gjejAeroportin(string emri);     
    }; 
    Kodi PHP:
    // AeroportManager Përdor AeroportetDAO për të plotësuar kërkesat 
    // biznesit/klientit për aeroportet. 
    class AeroportetManager {
      private:
        
    AeroportetDAO _aeroportetDAO

      public: 
        
    AeroportetManager(AeroportetDAO aeroportetDAO); 
        
        
    // Ngarkon aeroportet nga skedari i dhene. Perdor AeroportParser
        // për të lexuar aeroportet dhe i shton ata në AeroportetDAO. 
        
    void ngarkoAeroportet(string skedari); 
        
        
    // Kthen Aeroportin me emrin e dhënë ose NULL nëse nuk ekziston
        
    Aeroport gjejAeroportin(string emri);     
    }; 
    Kodi PHP:
    // Klasa për veprimet elementare për shtimin, fshirjen, dhe gjetjen e 
    // fluturimeve
    class FluturimetDAO {
      private:
        
    // mund të jetë vektor, map, ose një burim të dhënash (data source) 
        // e lidhur me databazën
        
    vector<Fluturim> * _fluturimet
        
      public: 
        
    // Krijon FluturimetDAO pa fluturime
        
    FluturimetDAO(); 
        
        
    // Krijon FluturimetDAO me fluturimet e dhënë
        
    FluturimetDAO(vector<Fluturim> * fluturimet); 
      
        
    // Shton fluturimin e dhenë në databazë
        
    void shtoFluturimin(Fluturim fluturim); 
        
        
    // Fshin fluturimin e dhënë nga databaza
        
    void fshiFluturimin(Fluturim fluturim); 

        
    // Kthen fluturimin nga vendnisja te vendarritja nëse ekziston; NULL në
        // të kundërt
        
    Fluturim gjejFluturim(Aeroport vendnisjaAeroport vendarritja); 
        
        
    // Kthen një vektor me të gjithë fluturimet
        
    vector<Fluturim *> gjejTeGjitheFluturimet(); 
        
        
    // Gjej fluturimet nga vendnisja. 
        // Kthen fluturimet e gjetur ose një vektor bosh. 
        
    vector<Fluturim *> gjejFluturimetNisurNga(Aeroport vendnisja); 
        
        
    // Gjej fluturimet nga vendarritja
        // Kthen fluturimet e gjetur ose një vektor bosh. 
        
    vector<Fluturim *> gjejFluturimetArrijneNe(Aeroport vendarritja); 

        
    // metoda të tjera të ngjashme me të mësipërmet
        
    ...     
    }; 
    Kodi PHP:
    // Kjo është klasa kryesore që do plotësojë kërkesat e biznesit/klientit.
    // Disa prej detyrave ia delegon AeroportManager-it dhe FluturimetDAO-s. 
    class FluturimetManager {
      private:
        
    AeroportManager _aeroportManager
        
    FluturimetDAO _fluturimetDAO
        
      public: 
        
    FluturimetManager(AeroportetDAO aeroportetDAO
                          
    FluturimetDAO fluturimetDAO); 
        
        
    //---------
        // metoda që ia delegon AeroportManager-it
        
    void ngarkoAeroportet(string skedari); 
        
        
    //---------
        // metoda që ia delegon FluturimetDAO-s
        
    vector<Fluturim *> merrTeGjitheFluturimet();
        
    vector<Fluturim *> gjejFluturimetNisurNga(Aeroport vendnisja); 
        
    vector<Fluturim *> gjejFluturimetArrijneNe(Aeroport vendarritja); 

        
    //---------
        // metoda qe i kryen me ndihmën e FluturimetDAO-s
        
        
    Fluturim shtoFluturimTeRastesishem();
        
    vector<Fluturim *> shtoFluturimePerTeGjitheAeroportet();
        
        
    // Ngarkon aeroportet nga skedari i dhene. Perdor FluturimetParser
        // për të lexuar fluturimet dhe i shton ata në FluturimetDAO. 
        
    vector<Fluturim *> ngarkoFluturimetNgaSkedari(string skedari);
        
        
        
    //--------
        // Metoda që i kryen me ndihmën e FluturimetDAO-s. Këto metoda 
        // mund t'i delegojë edhe tek një klasë tjetër e quajtur 
        // FluturimAnalizues
        
        
    vector<Fluturim *> gjejLidhjenMeTeShkurterNga(Aeroport vendnisja); 
        
    vector<Fluturim *> gjejLidhjenMeTeShkurterPerNe(Aeroport vendarritja);
        
        
    vector<Fluturim *> meTeShkurterQePershkon(vector<Aeroport *> aeroportet);
        
    vector<Fluturim *> meTeShkurterQePershkonTeGjithe();
    }; 
    U mundova të ndiqja sintaksën e C++ të cilën kam ca kohë pa e përdour kështu që me siguri do ketë gabime, por prandaj ke përpiluesin.


    Nuk do kishte vlerë detyra për ty nëse do shkruaja më shumë kod se kaq. Shpresoj të të ketë ndihmuar shpjegimi më lart. Nëse ke mundësi, do kisha dëshirë ta hidhje kodin e plotë në forum kur ta mbarosh për të parë nëse të ka ndihmuar dizajni im.

    I mirëpres komentet apo kritikat nga profesionistët për dizajnin apo kodin e mësipërm; të argumentuara sigurisht, se ndryshe s'do kishin vlerë.
    Ndryshuar për herë të fundit nga edspace : 05-02-2008 më 02:26
    Edi

  3. #3
    i/e regjistruar
    Anëtarësuar
    16-04-2004
    Postime
    674
    Nga detyra e parashtruar veshtire se mund te perdoresh trashegimin e klasave/objekteve te cilat i krijon per ta zgjedhur detyren, sepse vet detyra nuk eshte mjaft komplekse. Me fjale tjera nuk ka nevoje per klasa/objekte qe jane deri diku te ngjajshme. Edi ta parashtroj nje skenare bukur te mire ne te cilin une kam vetem nje koment.

    Per shkak te thjeshtesise se klases PikaGjeografike, kjo do te ishte e mundure te paraqitet me nje strukture e jo klase.

    Nese patjeter ke nevoj per te demonstruar trashegimin, zgjeroje detyren me stacionin e trenit dhe limanin. Keshtu mund te kesh nje klase "Stacioni" nga i cili me trashegimni krijohen klasat: "Stacioni ajror", "Stacioni tokesore" dhe "Stacioni detar" te cilet do kene tiparet pak me te vecanta.

  4. #4
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Citim Postuar më parë nga Uke Topalli Lexo Postimin
    Per shkak te thjeshtesise se klases PikaGjeografike, kjo do te ishte e mundure te paraqitet me nje strukture e jo klase.
    Cili do ishte avantazhi i përdorimit të struct?

    Mendoj se API duhet krijuar me klasa me qëllim që të zbatohen rregullat e mbështjelljes/fshehjes së implementimit (encapsulation) dhe ato të trashëgimisë (inheritance). Struct është e kufizuar në këto drejtime. Konkretisht, PikaGjeografike si klasë mund të ketë metoda të ndryshme për konvertime, operatorë, etj. Gjithashtu, mund të jetë klasë bazë për një klasë të re PikeAjrore e cila mund të shtonte edhe një koordinatë për lartësinë.

    Mendoj se struct është lejuar në C++ vetëm për të qënë e përputhshme me C-në. Struct mendoj se do ishte e përshtatshme përbrenda shtratit privat (private scope) të një klase. Për shembull, mbaj mend që kur po shkruaja kodin e një klase të quajtur Map (në kontekstin e një loje), më duhej të përdorja ngjyra në formatin RGB. Për të mos përdorur tre ndryshore të ndara (unsigned char red; unsigned char green; unsigned char blue), i bashkova të treja në një struct për të thjeshtuar kodin. Pra, përdorimi i struct ishte i kufizuar përbrenda klasës Map dhe struct mund të modifikohej ose fshihej pa qënë nevoja për të ndryshuar klasa të tjera.

    Kodi:
    class Map {
      public:
        ...
      private:
    
        typedef unsigned char Byte; 
        struct Color {
          Byte red;
          Byte green;
          Byte blue;
        };
    
        ...
    
    };
    Edi

  5. #5
    i/e regjistruar
    Anëtarësuar
    16-04-2004
    Postime
    674
    Nje prej "gabimeve" te shpeshta qe behet ne programim eshte krijimi i klasave te teperta, dhe te panevojshme (KISS). Ne procesine e dizajnimit eshte si rregull qe neqoftese nje entitet nuk ka ndonje funksionalitet (funksione dhe metoda) te veta, te paraqitet me ndonje kontejner primitiv. Ashtu sic eshte deklaruar klasa PikaGjeografike (pa ndonje funksionalitet) eshte me sensibile te futet ne strukture.

    Ne pergjithesi ne baze te kerkesave te parashtruar ne detyre nuk shoh ndonje "compelling reason" qe do te preferonte OOP ndaj "waterfall" pervec nese zgjerohet me kerkesat qe i kam cekur me larte. Pra kerkesat qe jan parashtruar mund te plotesohen shum bukur me nje program te shkruar ne c

  6. #6
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    C++ shtoi funksionin e klasave pikërisht për të thjeshtësuar kodin. Metodologjia OOP e bën kodin më të thjeshtë për të kuptuar dhe mirëmbajtur. Nëse PikaGjeografike kthehet në një struct, një klasë tjetër mund ta përdorë atë duke shkruajtur:

    Kodi:
    PikeGjeografike pike; 
    pike.gjeresia = 15; 
    pike.gjatersia = 25;
    Pas disa muajve mësojmë se PikeGjeografike duhet të ndryshojë. Për shembull, mund të na kërkohet ta përmirësojmë PikeGjeografike duke kontrolluar nëse koordinatat e dhëna janë brenda kufijve të lejuar (-90 <= gjeresia <= 90; -180 <= gjatesia <= 180).

    Nëse PikeGjeografike do ishte struct do na duhej të kërkonim të gjithë kodin se ku po përdorim PikeGjeografike dhe ta ndryshojmë atë. Pra, mund të na duhet të ndryshojmë dhjetra vënde të ndryshme.

    Në anën tjetër, kur PikeGjeografike është një klasë, mjafton të ndryshojmë vetëm metodat verGjeresia(double) dhe verGjatesia(double) si më poshtë:

    Kodi PHP:
    class PikeGjeografike {

      private:
        
    double _gjeresia;
        
    double _gjatesia

      public:
        
    void verGjeresia(double gjeresia); 
        
    void verGjatesia(double gjatesia); 

    };

    PikeGjeografike::verGjeresia(double gjeresia) {
      if (
    gjeresia >= GJERESIA_MIN && gjeresia <= GJERESIA_MAKS) {
        
    _gjeresia gjeresia
      }
      else {
        throw new 
    ArgumentIGabuar(gjeresia); 
      }
    }

    PikeGjeografike::verGjatesia(double gjatesia) {
      if (
    gjatesia >= GJATESIA_MIN && gjatesia <= GJATESIA_MAKS) {
        
    _gjatesia gjatesia
      }
      else {
        throw new 
    ArgumentIGabuar(gjatesia); 
      }


    Kjo është vetëm një detyrë akademike, por qëllimi kryesor është që studenti të zbatojë rregullat e OOP dhe të mësojë praktikat e mira të programimit.
    Edi

  7. #7
    i/e regjistruar
    Anëtarësuar
    16-04-2004
    Postime
    674
    Klasat jan futur si koncept per te lehtesuar mirembajtjen e programeve komplekse (zakonisht mbi dhjetera mija rresht te kodit) si dhe lehtesimin e koordinimit te punes te nje ekipi programues (ku detyrat ndahen ne pjese me te vogla).

    Meqenese gjeresia gjeografike eshte atribut i aeroportit, a nuk te duket e udhes qe sturktura pikagjeografike te jet veti i klases aeroporti dhe qasja(?) ti lejohet klasave te caktuara (shokeve???).

    Meqenese une e kam kryer shkollimin bukur moti, kam haru pak edhe llojin e detyrave qe perdoren per mesim, ama qe kjo detyra eshte teper e thjeshte per ti ilustruar konceptet e OOP.

    Mos keqkuptoni motivet e mia. Ka raste kur koncepte edhe me te thjeshta shendrohen ne klasa, por kjo varet nga funksionet qe mund te kryhen ne menyre qe te permbushen kerkesat e parashtruara. Ja per shembull nje klase/interface e cila ben pjese ne CAD programin qe jam duke e krijuar. Edhe pse ne aspektin fizik eshte fjala per pike/nyje per arsye se nje mori funksionaliteti lidhet per te, eshte e arsyeshme te adoptohet kjo rruge (interface e implementimi behet ne klasat tjera qe perdorin konceptin e njejte)
    Fotografitë e Bashkëngjitura Fotografitë e Bashkëngjitura  

  8. #8
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Citim Postuar më parë nga Uke Topalli Lexo Postimin
    Meqenese gjeresia gjeografike eshte atribut i aeroportit, a nuk te duket e udhes qe sturktura pikagjeografike te jet veti i klases aeroporti dhe qasja(?) ti lejohet klasave te caktuara (shokeve???).
    Po, këtë kam ilustruar me shembullin e struct Color në shkrimin e mëparshëm. Duke e kufizuar vetëm për shokët (friends), kufizon kodin që duhet të mirëmbash në të ardhmen. Por nëse vazhdojmë të mendojmë për të ardhmen, mund të lindin shumë klasa të reja që kanë nevojë për një PikëGjeografike. Në fakt, klasat për prezantimin e pikave gjeografike janë aq të nevojshme, sa ka dhe një librari të quajtur GeoStan (e përdorim në punë) për shitje. Pra, PikaGjeografike ka të ardhme edhe jashtë kontekstit të një aeroporti prandaj duhet të jetë klasë më vete; nuk është atribut (veti thelbësore) i Aeroportit por vetëm një veti anësore (si metadata) e tij.
    Edi

Tema të Ngjashme

  1. Hetimet e Kryeprokurorisë për tragjedinë e Gërdecit
    Nga RaPSouL në forumin Tema e shtypit të ditës
    Përgjigje: 625
    Postimi i Fundit: 07-07-2009, 23:56
  2. Krijim i nje Databaze në Access
    Nga crackeri në forumin Arti i programimit
    Përgjigje: 7
    Postimi i Fundit: 24-04-2009, 05:26
  3. Diplomacia, një detyrë e vështirë
    Nga Albo në forumin Kulturë demokratike
    Përgjigje: 1
    Postimi i Fundit: 22-05-2006, 13:42
  4. Ofertat me te reja per pune
    Nga ganoid në forumin Ekonomi & biznes
    Përgjigje: 27
    Postimi i Fundit: 21-01-2005, 13:30

Regullat e Postimit

  • Ju nuk mund të hapni tema të reja.
  • Ju nuk mund të postoni në tema.
  • Ju nuk mund të bashkëngjitni skedarë.
  • Ju nuk mund të ndryshoni postimet tuaja.
  •