» »

Učenje programiranja

Učenje programiranja

1
2
»

WarpedGone ::

Na faksu NE učijo jezikov, na faksu učijo principe in koncepte programiranja. Izbrani jezik je le tovornjak, za prevoz teh idej.
Zbogom in hvala za vse ribe

ramiz?! ::

Haha, vedno se oglasi nek "pametni" forumaš. Vem da na FRI ne učijo jezikov, ker gre za fakulteto za računalniško in informatiko in ne programerski faks.
Da vprašam še za tiste drugačne uporabnike tega foruma:
Katere izbrane jezike za prevoz principov in konceptov programiranja se zadnje leto ali dve uporablja na FRI?
Never regret anything, there's always a reason things happen.

Marat ::

Na VSŠ je pri Programiranju 1 Python, pri Programiranju 2 pa Java.

techfreak :) ::

Zanimivo, na FERI je pri Programiranje 1 & 2 izključno C++.

noraguta ::

BigWhale je izjavil:

Spura je izjavil:

BigWhale je izjavil:

To, da ni zascitenih in privatnih spremenljivk je pa zame prednost. Lahko API uporabljas tko kot hoces in ne tko kot avtor misli, da ga mors. :>
Valda je zate prednost, ker nimas pojma za kaj se to uporablja in ne znas OOP.


Jaz sem zase sicer povedal zakaj je to prednost. Ti pa trapas in se delas pametnega. No, razlozi mi kaj delam narobe in cesa ne znam.

ne pokazali si da ti ni jasen niti pojem apija. kje šele programskih paradigm. sej če ti paše imaš proceduralne jezike pa večji del interpraterjev. pust stvari katerih ne zastopš. ampak na veliko napiš ko sodeluješ v kakem projektu sploh kjer se delo deli.
ker podobno zoprni ti morajo bit tud muteksi , semaforji in ostale zadeve, katere omejujejo tvoj programerski polet? le zakaj bi katero koli stvar zapakiral v uporaben black box če ti lahko nekdo naknadno manipulira z zankami. no ja nekoliko težje, ker v sosledje varnosti kasneje uvedemo v jezik interpreter lock pa vse kopiramo da nismo glih obupno nevarni sami sebi. pa da ne bo pomote vsi ljubimo to, ampak za neko userend aplikacijo pač to ni zaželjeno. če jo uporabljaj en ali dva še gre sicer pa ne.
Pust' ot pobyedy k pobyedye vyedyot!

Zgodovina sprememb…

  • spremenilo: noraguta ()

gnomee ::

Na FERI-ju na Informatiki (VSŠ) skozi vsa tri leta C#, v 2. letniku se pri predmetu Dinamične Spletne Rešitve uporablja ASP.NET MVC3.. Medtem, ko pa na Informatiki (UNI) večinoma JAVA, nekaj je tudi PHP-ja..

Marat ::

lol, na vsš M$-jevi jeziki, na uni pa open source :D

MrBrdo ::

Sej delo v MS jezikih je bolje plačano... VSŠ izobražujejo za delo, UNI pa očitno za akademsko ane. Izbira je kar logična.
MrBrdo

amacar ::

FERI RIT UNI
Programiranje 1&2 ter aps = c++
Ostali predmeti je povečini jezik po želji, sploh v 2 letniku se ne komblicira, razen če se kaki dll-ji pišejo.
Je še pa bash, C, mfc, c#, assembler, java.
V tretjem letniku bomo pa še videli, predvidevam, da bo povečini jezik po izbiri, razen če se pri kakšni vaji izrecno zahteva kaj drugega.

Sicer pa ne vidim velike težave prešaltat na drug programski jezik, po tem ko ti en že gre kr dobro. Ali pa smo mi dobili ok podlago iz C++.

noraguta ::



Sicer pa ne vidim velike težave prešaltat na drug programski jezik, po tem ko ti en že gre kr dobro. Ali pa smo mi dobili ok podlago iz C++.
mogoče je res kar pravič ampak dej mi povej kako človek po vaše intiktivno šalta med gojenjem for stavka v proceduralnem, iteratorji v ojektnem anu mapom v funkcijskem? pa kako nek lolek na faksu debugira c++ kodo?
Pust' ot pobyedy k pobyedye vyedyot!

amacar ::

Ne vem, kaj točno me sprašuješ, ampak for/if/while... so v teh jezikih, ki sem jih uporabljal klasika (-asm), ni nekih velikih sprememb, bolj v sintaksi.
Pač hotel sem povedat, da se ni tako težko priučiti drugega jezika, če imaš osnove pokrite, pa če je dovolj literature, kar je na spletu povečini je.

Kako se debugga? Posebej nas niso učili, sam pač pripravim breakpointe, kjer se zadeva zalomi pa pogledam vrednosti. Za neko drugo pot nisem glih slišal...

Zgodovina sprememb…

  • spremenil: amacar ()

BigWhale ::

noraguta je izjavil:

ne pokazali si da ti ni jasen niti pojem apija. kje šele programskih paradigm. sej če ti paše imaš proceduralne jezike pa večji del interpraterjev. pust stvari katerih ne zastopš. ampak na veliko napiš ko sodeluješ v kakem projektu sploh kjer se delo deli.


Seveda, spet nekdo, ki samo trolla in ne da nobenega pametnega argumenta za svoje trditve. Edina stvar, ki jo v resnici pridobis s private/protected/public metodami/spremenljivkami je to, da lahko tvoj IDE prikaze kaj je 'public API' interface in kaj so helper metode, ki jih naceloma ne klices.

Pred kom bi sicer rad zavaroval podatke? Pred zlobnezi, ki delajo s tabo na projektu? Pred zlobnezi, ki zelijo, da tvoj API crkne medtem, ko ga uporabljajo v svoji aplikaciji? Ce imas pa mission critical zadevo (recimo, da si banka), potem mora pa tvoj API biti tak, da tako ali tako ne dela direktno s kriticnimi podatki ampak je vmes se vsaj en layer, ki preverja vse kar je potrebno preveriti.

noraguta je izjavil:

ker podobno zoprni ti morajo bit tud muteksi , semaforji in ostale zadeve, katere omejujejo tvoj programerski polet?


Itak, vse to so samo cokle pri delu nekoga, ki je tako brilijanten kot sem jaz in iz rokava stresa pure binary ze preveden za vse platforme pod soncem. Jaz sem pisal programe za 256 bitne procesorje, ko se intelu se sanjalo ni o 32 bitnih! Sam tolk, da ves ...

MrBrdo ::

Nebi se strinjal da je private/public uporaben samo za API...
Encapsulation (object-oriented programming) @ Wikipedia
Hiding the internals of the object protects its integrity by preventing users from setting the internal data of the component into an invalid or inconsistent state. A benefit of encapsulation is that it can reduce system complexity, and thus increases robustness, by allowing the developer to limit the interdependencies between software components.
MrBrdo

morbo ::

Saj v Pythonu lahko (delno) zavaruješ elemente objekta pred zlorabo - tako da jih poimenuješ z enojnim ali dvojnim podčrtajem. Enojni podčrtaj je le hint uporabniku "ne tikaj tega če ne veš kaj delaš", dvojni pa dejansko oteži šarjenje po spremenljivki / klicanje metode (ne pa v celoti prepreči).

To je vse kar moder uporabnik rabi. Ne vem zakaj bi se moral API developer posebej potrudit da ti "100%" prepreči delat neumnosti? Java je ortodoksno zaguljena glede tega.

WarpedGone ::

Kaj ti v javi preprečuje da ubereš natanko enako pot?
"Loaded" imena spremenljivk so pa sploh svoga dnarja vredna... GPSS comes to mind.
Zbogom in hvala za vse ribe

morbo ::

WarpedGone je izjavil:

Kaj ti v javi preprečuje da ubereš natanko enako pot?

Offtopic redeča nit te teme je da je Python "slab ker nima prave enkapsulacije". Jaz sem samo enakega mnenja kot BigWhale, tj. da se da lepo preživet brez striktne enkapsulacije in ni zaradi tega Python nič manj OOP.

Mavrik ::

Seveda da ni, pa seveda se da. Samo glede na to da so morali pri Pythonu priti do tako butastih rešitev kot je delanje črtic pred imeni da simulirajo enkapsulacijo kaže, da bi taki konstrukti v jeziku precej pomagali.

Seveda, spet nekdo, ki samo trolla in ne da nobenega pametnega argumenta za svoje trditve. Edina stvar, ki jo v resnici pridobis s private/protected/public metodami/spremenljivkami je to, da lahko tvoj IDE prikaze kaj je 'public API' interface in kaj so helper metode, ki jih naceloma ne klices.


Jao, ne nakladi no. Pejt enkrat en mal večji projekt pogledat (oz. raje dva, enega v Javi, drugega v Pythonu) pa ti bo mal bolj jasno zakaj so take stvari zelo uporabne pri razvoju. Pri projektih kjer se trije ljudje bockajo pač to ni nekaj kar bi prišlo do izraza - isto kot type sistem.
The truth is rarely pure and never simple.

BigWhale ::

Pred kom hudica mors zavarovat interne variable in metode? Tukaj ne gre za uporabnike tipa 'joze in micka', ki klikata po aplikaciji ampak gre za uporabnike doticnega lib-a, api-ja. Gre za ljudi, ki vsaj priblizno vedo kaj delajo in kako se dolocene zadeve uporablja.

Jaz vem zakaj in kako se uporablja private/public/protected ampak ne vidim razloga zakaj bi moral zavarovati stvari pred drugimi oziroma pred kom? Pred kolegi v firmi, ki delajo z menoj? Njim ze sama dokumentacija pove kaj lahko in cesa ne smejo. A bo zaradi tega kak bug manj, ce bom namesto public naredil private variable in napisal getter/setter metodi? Preverjanje inputa se bom sel ob vnosu. Pa velja isto za projekt kjer delajo trije, trideset ali pa tristo programerjev.

Pridobim to, da se nek programer ne bo zmotil in po nesreci popravljal neko interno spremenljivko na nedovoljeno vrednost. Zmotil se bo pa zato, ker bo narobe prebral specifikacije. Mnja.

No, saj ne pravim, da je Python zaradi tega boljsi. Insanity z underscore pred imenom spremenljivke je prav tako traparija.

MrBrdo ::

BigWhale gre se za to da se ti lahko zgodi, da nekaj sprogramiraš, in potem čez eno leto nekaj delaš, ko si že pozabil točno kako in kaj. Če so pa še drugi programerji v igri potem pa sploh. Je napaka da obravnavaš programerje kot neke ljudi brez napak ki se ne morejo zmotit. Pač enkapsulacija je en način kako preprečit da se dela z objektom nekaj kar ni bilo načrtovano. Če bi bli programerji popolni je verjetno nebi lih rabil. Pomaga pa tudi pri abstrakciji pa take stvari.
Lah se ti zgodi da recimo ne veš da v bistvu ta pa ta metoda spreminja to pa to stvar in je nej nebi klical izven samega objekta... Itd. mal pogoogli oop encapsulation pa boš najdu kakšno bolj konkretno razlago.
Enkapsulacija je ena od temeljnih stvari v OOP, tko da če se greš OOP naj bi načeloma tko delal. Lah se pa greš kej drugega.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

lambda ::

BigWhale je izjavil:

Pred kom hudica mors zavarovat interne variable in metode? Tukaj ne gre za uporabnike tipa 'joze in micka', ki klikata po aplikaciji ampak gre za uporabnike doticnega lib-a, api-ja. Gre za ljudi, ki vsaj priblizno vedo kaj delajo in kako se dolocene zadeve uporablja.

Jaz vem zakaj in kako se uporablja private/public/protected ampak ne vidim razloga zakaj bi moral zavarovati stvari pred drugimi oziroma pred kom? Pred kolegi v firmi, ki delajo z menoj? Njim ze sama dokumentacija pove kaj lahko in cesa ne smejo. A bo zaradi tega kak bug manj, ce bom namesto public naredil private variable in napisal getter/setter metodi? Preverjanje inputa se bom sel ob vnosu. Pa velja isto za projekt kjer delajo trije, trideset ali pa tristo programerjev.

Pridobim to, da se nek programer ne bo zmotil in po nesreci popravljal neko interno spremenljivko na nedovoljeno vrednost. Zmotil se bo pa zato, ker bo narobe prebral specifikacije. Mnja.

No, saj ne pravim, da je Python zaradi tega boljsi. Insanity z underscore pred imenom spremenljivke je prav tako traparija.


Separation of concerns? Loose coupling? Ni bistvo v tem da bi se trudil skriti - vedno lahko prideš do nekega podatka z neke sorte reflectionom, tudi če je private. Namen je preprosto dati zunanjemu svetu minimalen nabor, ki mu v celoti zadostuje. Keep it simple, nobene potrebe ni po tem, da se navzven vidi vse podrobnosti.

Enkapsulacija ti pomaga, da se držiš dobrih praks. Po možnosti je zato še koda dovolj self-descriptive, da se sploh ni treba zakopat v dokumentacijo.

Zgodovina sprememb…

  • spremenil: lambda ()

BigWhale ::

Ja, ampak to ti pomaga samo takrat, ko tvoj IDE zna pred teboj skriti privatne in protected zadeve. Dokler imas dostop do kode APIja, ki ga uporaljas je to skoraj edina prednost. Za uporabo APIja bos moral ali prebrati dokumentacijo ali odpreti kodo.

Ce nimas kode, potem uporabljas tiste stvari za katere ves, da obstajajo in so omenjene v dokumentaciji. Seveda, ce so privatne zadeve skrite, potem necesa ne mores po nesreci uporabiti in preprecis, da bi nekdo namenoma iskal taksne stvari. Hkrati pa preprecis tistim, ki bi lahko to uporabili v svojo prednost, da tega ne morejo narediti. Meni se je ze zgodilo, da je nekdo naredil nekaj spremenljivk privatnih in ni bilo nobenega getterja zanje. Ker je bil to nek zaprt API je trajalo pol leta, da so na drugi strani to potem popravili. Po precej prepricevanja so ugotovili, da imam prav in da bi bilo lepo imeti vsaj getter za tiste zadeve.

Ce pa imas kodo, potem je pa tako ali tako iz kode razvidno kaj lahko uporabljas in cesa ne.

Hocem samo povedati, da enkapsulacija ni nek sveti gral OOPja in da je vcasih lahko precej v nadlego. Moj prvi post o tem je bil pa itak flamebait. In to se kar uspesen! ;)

MrBrdo ::

Encapsulation is one of the four fundamental OOP concepts. The other three are inheritance, polymorphism, and abstraction.
MrBrdo

BigWhale ::

Ja, pa kaj? To se ne pomeni, da ti ne more biti v napoto. :) Pa zaradi tega ni sveti gral. Hehe.

Mavrik ::

BigWhale: Recmo temu tko: "Zastonj" dokumentacija, kjer compiler brca ljudi ki jo hočejo kršiti. Isto kot type sistem ;)
The truth is rarely pure and never simple.

MrBrdo ::

Men se zdi podobno, kot da bi rekel da ne rabiš compilerja, da ti preverja sintaktične napake, ker itak dobri programerji "vejo" kako je treba delat.
Vsi programerji se motijo.
MrBrdo

noraguta ::

Mavrik je izjavil:

BigWhale: Recmo temu tko: "Zastonj" dokumentacija, kjer compiler brca ljudi ki jo hočejo kršiti. Isto kot type sistem ;)

nevem čemu mižikaš type sistem je povsem uporaben, če jezik podpira pattern matching. ampak to je za slo tech že preveč. raj se grejo duck typing. nej še sosedu krava crkne.
Pust' ot pobyedy k pobyedye vyedyot!

noraguta ::

Pred kom hudica mors zavarovat interne variable in metode? Tukaj ne gre za uporabnike tipa 'joze in micka', ki klikata po aplikaciji ampak gre za uporabnike doticnega lib-a, api-ja. Gre za ljudi, ki vsaj priblizno vedo kaj delajo in kako se dolocene zadeve uporablja.
ker ne moreš zagotovid thred safe delovanja, če tega ne veš ne trapaj kot krava s teletom.
Pust' ot pobyedy k pobyedye vyedyot!

noraguta ::

pa še kaj je rešitev za gil
http://python-3-patterns-idioms-test.re...
Pust' ot pobyedy k pobyedye vyedyot!

BigWhale ::

noraguta je izjavil:

Pred kom hudica mors zavarovat interne variable in metode? Tukaj ne gre za uporabnike tipa 'joze in micka', ki klikata po aplikaciji ampak gre za uporabnike doticnega lib-a, api-ja. Gre za ljudi, ki vsaj priblizno vedo kaj delajo in kako se dolocene zadeve uporablja.
ker ne moreš zagotovid thred safe delovanja, če tega ne veš ne trapaj kot krava s teletom.


V bistvu res nevem o cem govoris in zakaj ne bi mogel zagotoviti thread safe delovanja, ce nimas privatnih/protected spremenljivk in metod. Das lahko kak primer?

noraguta ::

BigWhale je izjavil:

noraguta je izjavil:

Pred kom hudica mors zavarovat interne variable in metode? Tukaj ne gre za uporabnike tipa 'joze in micka', ki klikata po aplikaciji ampak gre za uporabnike doticnega lib-a, api-ja. Gre za ljudi, ki vsaj priblizno vedo kaj delajo in kako se dolocene zadeve uporablja.
ker ne moreš zagotovid thred safe delovanja, če tega ne veš ne trapaj kot krava s teletom.


V bistvu res nevem o cem govoris in zakaj ne bi mogel zagotoviti thread safe delovanja, ce nimas privatnih/protected spremenljivk in metod. Das lahko kak primer?

ker boš moral to postorit v cju, sam jezik ti pa tega ne omogoča. to je ta jeba. na koncu pristaneš pri definiranuju kritičnih cekcijah. bog ne daj pa da je podstat napisana v c++ kjer sta podatkovna struktura in metode zapovrh še vazane ne eksekucijo. java ko powrapaš native skrije pred tabo vmešavnaje v izvajanje python pa z nekaj triki tega ne zmore po vsem. pa ni to samo tvoj problem pri večini reševanja problemov na forumu sem videl veliko priljubljenost statičnih spremeljivk. nevem al to učijo po naših šolah. al je to domača obrt. ampak tga se ne dela. nikoli, razen z namenom izmenjave podatkov me nitmi in procesi. celo read je nevaren ker ne veš koliko časa bo rajal in ali je spremenljivka sploh inicializirana. zato tudi pristiska trend funcijskih jezikov. ker je koda bolj predvidljiva. lahko pa za vsako stvar pišeš sleep funkcije in podobno ampak to danes ni več spodobno. no je vsi smo jih in se bodo tudi v bodoče še en lep čas. ti pa zjebe to vsakršno predvidljivo enkapsulacijo in modularizacijo. naj bo na dnu kralj c(katerega je fajn da pozna vsak programer), čezenj pa jezik s solidno semantiko, in ta naj onemogoča svinjarije, ker v nasprotnem je vs GC in ostalo neefektno.
Pust' ot pobyedy k pobyedye vyedyot!

BigWhale ::

Se vedno ne vem o cem govoris pri thread safe delovanju in privatnimi spremenljivkami. Zato sem tudi prosil, da das primer, ko bo neka allegedly thread safe funkcija odletela, ker bo uporabljala public namesto privatno spremenljivko.

Invictus ::

Če po zaključku faksa ne znaš preklopit na drug jezik v relativno kratkem času, potem pomeni da se niti ni naučil programirati.

Sam sem do sedaj delal v približno 10 jezikih v različnih službah, pri čemer je kak jezik specifičen za produkt.

Se pač naučiš, seznaniš z omejitvami in plusi in delaš.

Tudi kladivo ti ne pomaga če ne veš kje in kako zabijati žebljev ...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

WarpedGone ::

Ma ja, ta fiksacija na Pravi Jezik je čisto mimo. Al znaš govorit al pa ne znaš. To je vse kar šteje.
Al se v Pythonu da skladat sonete al je boljši za Rap je pomembno šele ko že znaš govorit.
Zbogom in hvala za vse ribe

Looooooka ::

BigWhale je izjavil:

Se vedno ne vem o cem govoris pri thread safe delovanju in privatnimi spremenljivkami. Zato sem tudi prosil, da das primer, ko bo neka allegedly thread safe funkcija odletela, ker bo uporabljala public namesto privatno spremenljivko.

prej obratno.

public funkcija/property mogoce poskrbi, da se znotraj tega classa vse izvaja v "thread-safe" nacinu.Ce gre nekdo drkat po privat spremenljivkah mas pa takoj problem.
Oz mogoce public property po tem ko nastavi privat spremenljivko se kaksen event dvigne.
Ampak ook...ne vem o kerem jeziku je tocno govora ampak sklepam, da se mora nek zunanji programer hudicevo dobro potruditi preden sploh zacne praskat po privat funkcijah/propertyjih.
To potem verjetno dela z nekim razlogom :)

Spura ::

BigWhale je izjavil:

Spura je izjavil:

BigWhale je izjavil:

To, da ni zascitenih in privatnih spremenljivk je pa zame prednost. Lahko API uporabljas tko kot hoces in ne tko kot avtor misli, da ga mors. :>
Valda je zate prednost, ker nimas pojma za kaj se to uporablja in ne znas OOP.


Jaz sem zase sicer povedal zakaj je to prednost. Ti pa trapas in se delas pametnega. No, razlozi mi kaj delam narobe in cesa ne znam.

Na tem forumu so dostikrat debate o prednostih quick and dirty jezikov pred bolj staticnimi jeziki z visibility modifierji in podobnim, oziroma o nepotrebnosti uporabe teh mehanizmov v jezikih, ki jih podpirajo. Do neke mere so take debate legitimne (ceprav sem jaz vedno za uporabo teh mehanizmov), ker tukaj prakticno vsi delamo koncne produkte, kjer je vsa oziroma vecji deli kode nasa lastna ali pa vsaj iz ozkega kroga ljudi, in je zato omejevanje vidnosti nekoliko manj smiselno.

Potem pa prides ti in reces, da je prednost ne imet omejene vidnosti pri APIjih. Od vseh stvari moznih si ravno APIje najdu, softwersko podrocje kjer so prednosti visibility modifierjev dalec najbolj ocitne. Iz tega je mogoce sklepat le, da ne poznas izdelave in vzdrzevanja APIjev in ne razumes OOP.

APIji oziroma objekti ki nastopajo v njih imajo pogosto contracte, ki se jih morajo drzat. Lep primer je java String, ki mora bit immutable. Ce nobene metode ni mozno skriti, potem ne mores imeti convenience metod v APIju katere bi unicile ta contract. Recimo String class ima konstruktor, ki prejeti char[] ne kopira, kar omogoca, da naredis String, ki je mutable. To bi lahko unicilo delovanje celega kupa druge kode, zato je ta konstruktor package scoped in ga uporabljajo samo posveceni classi kot je StringBuilder. Ce je vse public ne mores imeti metod, ki predpostavljajo, da so parametri pravilno formirani, ne mores imeti metod, ki predpostavljajo, da je objekt v dolocenem stanju, ne mores imeti metod, ki predpostavljajo, da so klicane pred ali za neko drugo metodo. Vse to izredno otezi pisanje APIja in dela njegovo kodo konfuzno. Potem takoj pride potreba po pisanju dolge dokumentacije o tem kdaj se lahko kaj klice in kako to mutira stanje objekta, ker je to pomembno za funkcije in treba je popisat vse tipe in vse funkcije, kaj so in kaj pocnejo.

Druga stvar je to, da vse kar je public lahko nekdo uporablja, torej ko izdas novo verzijo APIja moras naceloma public del ohranjat identicen. Ce ne mores nicesar skriti potem je vsako metodo v APIju potencialno nekdo uporabil in ne mores spremenit niti enega method signaturea v APIju, kaj sele da bi delal velike refactoringe v kolikor hoces da je nova verzija kompatibilna s staro. Kar je se hujse, lahko se spremeni delovanje kaksne metode, tako da vraca drugacne rezultate pri dolocenem inputu.

Recimo neka interna funkcija za iskanje po drevesu v seznam zadetkov poleg otrok po novem doda tudi vozlisce samo. Ti si to spremenu, ker nekje rabis za neko novo funkcionalnost, in potem popravis vse klicatelje te funkcije znotraj te knjiznjice, da upostevajo to novo dejstvo. In ce je ta funkcija public in jo je nekdo uporabljal, si bo nalozil novo verzijo knjiznjice in se mu ne bo nic rdece pobarvalo, ker je sintaksa ista in bo njegova koda zacela vracat napacne rezultate. Vcasih zaradi kompleksnosti ali pa kolicine podatkov traja mesece, da napacno delovanje opazis in odpravis. In potem moras za knjiznjico pisat podrobne change loge in folk jih mora brat (fat chance).

Torej manjsi kot je public del, bolj si fleksibilen v spremembah delovanja knjiznjice, ki bodo povsem transparentne za uporabnika.

Tretja stvar je to, da imajo dobri API ozek interface (kolikor pac to omogoca problemska domena). Ni hujsega kot da si za nekaj relativno enostavnega potegnes dol knjiznjico in je potem 100 classov s 10 metodami vsak pa ogromno konstruktorji, da te na rit vrze ko stisnes autocomplete k je tok opcij. Stevilo tipov naj bo omejeno, stevilo vstopnih tock cim manjse (vstopne tocke kot prva API funkcija ki jo klices), prav tako je dobro minimizirat stevilo povezav med deli APIja (torej stevilo poti rezultatov neke operacije v naslednji korak - razen kadar je v naravi problema nasprotno).

Recimo da delam XPath over JSON knjiznjico. Zadeva obsega 40 classov, vidnih je 5. Dva exception classa brez vidnih konstruktorjev, dva interfaca s po dvema metodama(metode enega vracajo instance drugega), en class brez vidnega konstruktorja in z eno staticno metodo, ki vraca implementacijo enega od interfaceov.

Tak API ima natancno eno vstopno tocko (staticna funkcija), dobis instanco enega interfacea, iz katerega dobis listo instanc drugega. Simpl kot pasulj. API sam rabi 0 vrstic dokumentacije. Jst lahko zamenjam parser generator iz JCup na Beaver (cisto drugi classi in function signaturei) in noben uporabnik ne bo nicesar opazu.
Ce bi imel pa vidnih vseh 40 classov pa vse metode, bi pa moral napisat user manual, ohranjat sintakso in delovanje obstojecih funkcij, le nove bi lahko dodajal, rigidno k svinja, v vse funkcije dodat checke za razna stanja, ker ne bi mogel delat dolocenih predpostavk, itd... stvari k sm jih zgoraj omenil.

Zdej ce pa kdo misli, da boljs ve od avtorjev kako API uporabljat, ima pa ponavadi na voljo source, pa naj si ga sname pa nastima vse na public pa si naredi lib in ga da v svoj projekt. In naj to tudi sam podpira, ostalih 99.9% uporabnikov bo pa raje imelo easy to use, narrow API, ki je funkcionalno in sintakticno stabilen skozi verzije.

In v koncni fazi, ce so si avtorji slabo zamislili ali implementirali API, pa skoraj nikoli tega ne bos resil z drugacnim, lasnorocnim klicanjem njihovih internal funkcij, ampak bos to resil bodisi z downloadanjem sourcea in odpravo bugov bodisi z izbiro druge knjiznjice bodisi s pisanjem svoje. Torej tudi iz tega stalisca tvoja ideja ni smiselna.

V koncni fazi imas te benefite tudi na produktih za koncne uporabnike (mocnjesi benefiti vec kot ljudi dela na projektu), zato je zagovarjam klasicne OOP prijeme pri vseh projektih. Ampak ce je tam to stvar debate ("jst raje hitro prototipiram z node.js bla bla" - can be a valid opinion) so ti benefiti pri APIjih 100x mocnejsi in kakrsnokoli mnenje, da je implementation hiding brezveze pri njih, nima nobene podlage.

Spura ::

BigWhale je izjavil:

Edina stvar, ki jo v resnici pridobis s private/protected/public metodami/spremenljivkami je to, da lahko tvoj IDE prikaze kaj je 'public API' interface in kaj so helper metode, ki jih naceloma ne klices.
Missing the point. Pozabil sem tudi omenit, da kar sem napisal velja za splosne user knjiznjice, za posebne (recimo security knjiznjice) pa velja dvojno. Pa ljudje ki govorijo o thread-safety imajo tudi point. Ce hoces thread-safe mora biti vsaka javna metoda z mislijo na to napisana, kar ce nimas ne-javnih metod v koncni fazi pomeni vse metode. Zaradi tega lahko pride do tega, da postane to bodisi nemogoce, bodisi zapleteno, bodisi pocasno (sinhronizacija je draga k pes).

Zgodovina sprememb…

  • spremenil: Spura ()
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Applov nov programski jezik Swift (strani: 1 2 )

Oddelek: Novice / Apple iPhone/iPad/iPod
7232090 (26651) Kocka
»

Svetla prihodnost za Ruby? (strani: 1 2 )

Oddelek: Programiranje
507461 (5911) MrBrdo
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8511367 (9834) kivi113
»

PHP vs. ASP.NET vs. $OTHER (strani: 1 2 3 4 )

Oddelek: Programiranje
16313219 (10574) Spura
»

Kateri programski jezik?

Oddelek: Programiranje
494426 (3039) kopernik

Več podobnih tem