Vastaa
Se riippuu siitä, miten haluat luokitella kielet. Pohjimmiltaan kielet voidaan jakaa kahteen tyyppiin: välttämätön kielet, joissa opastat tietokonetta miten tehtävän suorittamiseksi ja deklaratiiviset kielet, joilla käsket tietokoneelle mitä tehdä. Deklaratiiviset kielet voidaan edelleen jakaa toiminnallisiin kieliin, joissa ohjelma rakennetaan muodostamalla funktiot, ja logiikka ohjelmointikielet, joissa ohjelma rakennetaan loogisten yhteyksien kautta. Pakolliset kielet lukevat enemmän kuin luettelo ongelman ratkaisemisesta, eräänlainen kuin resepti. Pakollisia kieliä ovat C, C ++ ja Java; toiminnallisiin kieliin kuuluvat Haskell; loogiset ohjelmointikielet sisältävät Prologin.
Pakottavat kielet jaetaan joskus kahteen alaryhmään: menettelytavat kielet kuten C ja olio-kielet . Objektikeskeiset kielet ovat kuitenkin hieman kohtisuoria ryhmittelyihin nähden, koska on olemassa olio-orientoituja toiminnallisia kieliä (OCaml ja Scala ovat esimerkkejä).
Voit myös ryhmitellä kieliä kirjoittamalla: staattinen ja dynaaminen . Staattisesti kirjoitetut kielet ovat kieliä, joissa kirjoittaminen tarkistetaan (ja yleensä pakotetaan) ennen ohjelman suorittamista (tyypillisesti kääntövaiheen aikana); dynaamisesti kirjoitetut kielet lykkäävät tyypin tarkistusta ajonaikaan. C, C ++ ja Java ovat staattisesti kirjoitettuja kieliä; Python, Ruby, JavaScript ja Objective-C ovat dynaamisesti kirjoitettuja kieliä. On myös untyped -kieliä, jotka sisältävät neljännen ohjelmointikielen.
Voit myös ryhmitellä kieliä heidän kirjoittamisensa kuria : heikko kirjoittaminen, joka tukee implisiittisiä tyypin muunnoksia, ja vahva -tyyppinen kirjoittaminen, joka estää implisiittisen tyypin muuntamisen. Näiden väliset viivat ovat hieman epäselvät: joidenkin määritelmien mukaan C on heikosti kirjoitettu kieli, kun taas toiset pitävät sitä voimakkaasti kirjoitettuna. Kurinalaisuuden kirjoittaminen ei ole missään nimessä hyödyllinen tapa ryhmittää kieliä.
Kommentit
- Aioin esittää jotain vastaavaa, mutta antaa +1 ja Lisää kommentteja sen sijaan. Jokaisessa luokassa tai yhdistelmässä on myös lukuisia spin-offeja, jotka on luotu keskittymällä tiettyihin elementteihin. OOP esimerkiksi antaa: prototyyppipohjainen OOP, näkökulmasuuntautunut ohjelmointi, komponenttipohjainen ohjelmointi ja niin edelleen. myös toiminnalliset paradigmat sinulla on spin-offeja, kuten kieliä, joissa asynkroninen prosessi tai ketju on perusyksikkö, ja ohjelmoit muodostamalla rinnakkaiset prosessit yhdessä.
- Kuinka komentosarjakielet, esim. VBScript, sopivat tähän? Se voi olla vähän menettelytapoja ja vähän OO: ta, koska voidaan luoda erilaisia tyyppejä, joten tekisikö siitä hybridi?
- Juuri tätä etsin. Kiitos paljon.
- @ JB King OOP -kielet ovat yleensä menettelyllisiä, ainakin menetelmän elimissä.Lisäksi se ' on yleinen väärinkäsitys, että OOP tarkoittaa " objekteja ". Monilla kielillä on tietotyypit ja objektit. Siellä ' käydään paljon keskustelua OOP: n tarkasta määritelmästä, mutta se sisältää yleensä perinnön ja / tai kapseloinnin (yksityinen valtio) pääteemoina. Kieli, jossa ei ole jommassakummassa muodossa, olisi vaikea luokitella OOP-kieleksi.
- @sova Voin vain ajatella kahta sellaista kieltä, jotka toimivat tavallaan. Erlang perustuu voimakkaasti rinnakkaisprosessointiin, mutta jos haluat enemmän sellaista, josta puhuin tarkalleen, sinun tulisi tutkia Polyfoninen C #. Se ' sa tutkimuskieli (nyt taitettuna C-omega) Pi-Calculuksen perusteella (kuten miten FP perustuu lambda-laskentaan) Pi-calc perustuu prosessin yksikköön , ja ilmoitat prosesseista sekä synkronisten ja asykkikutsujen yhdistelmästä niihin. Tutustu myös FP: n nuoliin, etenkin Haskelliin. Nuolet ovat hyvin samanlaisia.
Vastaa
- Kokoonpano
- Menettelytapa
- Perustiedot
- C
- Kohdistettu
- C #
- Java
- Vakuuttava
- Prolog
- SQL
- Toiminnallinen
- Lisp
- Haskell
Nämä ovat tärkeimmät, mutta siellä on paljon muita paradigmoja, ja niiden välillä on paljon päällekkäisyyksiä.
Kommentit
- Entä deklaratiivinen (esim. Prolog, SQL)?
- @Bruce, sai heidät nyt.
- Joo, tämä oli yleinen idea, jonka opin jonnekin matkan varrella.
- Pitäisi olla t kokoonpanoa voidaan pitää menettelytapana?
- Entä ketjuttavat (pinopohjaiset) ohjelmointikielet, kuten Forth ja Factor? Voisit pitää sitä eräänlaisena toiminnallisena ohjelmointina, mutta se ' on todennäköisesti riittävän erottuva ansaitsemaansa maininnan. fi.wikipedia.org/wiki/Concatenative_programming_language
vastaus
Katso ohjelmointikielten tyypit (paradigmat) täältä:
http://en.wikipedia.org/wiki/Programming_paradigm
Katso muut ohjelmointikielien ominaisuudet (esim. Type Systems) täältä: http://en.wikipedia.org/wiki/Programming_language
Kommentit
- ah! " paradigma " mikä hyvä sana! kiitos
- @sova Hyväksyisin tämän parhaana vastauksena, koska P.SE-vastauksessa on yksinkertaisesti liian monta paradigmaa, joita ei voida luetella, eikä vähemmän kuvata kunkin vivahteita.
Vastaa
Napsauta kuvaa nähdäksesi PDF-tiedoston.
Sinun tulisi tarkastella Peter Van Royn ohjelmointimallit nukkeille: mitä jokaisen ohjelmoijan tulisi tietää . Tämä antaa sinulle yleiskuvan siitä, miten se tapahtuu ulkona.
Jos haluat mennä pidemmälle, voit lukea -konseptit, tekniikat ja mallit Tietokoneohjelmointi . Et opi kieltä tällä tavoin, mutta opit paradigmat, jotka ovat erilaisten kielten takana. Joten uuden kielen oppiminen on sinulle helpompaa.
Vastaa
-
Menettelytapa: Assembly, Java, C #, F #, Lisp, Fortran.
-
Joukkopohjainen: SQL.
-
Kuvio perustuu: Perl, Regex, Snobol.
-
Puupohjainen: XSLT.
-
Taulukko pohjainen: APL.
Kommentit
- +1 erityyppisen luokituksen käyttämisestä ja myös sen tunnistamisesta, että ' menettelytapa ' sisältää itse asiassa suurimman osan muista ' -luokituksista. (tietysti se tarkoittaa vain, että sanalla on hyvin vähän merkitystä ja liha on sellaisissa alajaoissa)
Vastaa
Tähän voidaan vastata eri tavoin, mutta termeissä ne voidaan luokitella seuraavasti:
Konekieli: Konekieli on matalan tason ohjelmointikieli. Tietokoneet ymmärtävät sen helposti, mutta ihmisten on vaikea lukea sitä. Siksi ihmiset käyttävät korkeamman tason ohjelmointikieliä. Korkean tason kielillä kirjoitetut ohjelmat myös joko käännetään ja / tai tulkitaan konekielelle, jotta tietokoneet voivat suorittaa ne.
Asennuskieli: Asennuskieli on konekielen esitys. Toisin sanoen kukin kokoonpanokieliopetus kääntyy konekieliseksi ohjeeksi. Vaikka kokoonpanokielen lauseet ovat luettavissa, lausunnot ovat silti matalalla tasolla. Kokoonpanokielen haittapuoli on, että sitä ei voida siirtää, koska jokaisella alustalla on tietty kokoonpanokieli.
Korkean tason kieli: Useimmat ohjelmoijat käyttävät nykyään korkean tason kieliä. Kielet, kuten C, C ++ ja Java, ovat kaikki korkean tason kieliä. Korkean tason kielten etuna on, että ne ovat erittäin luettavia ja kannettavia. Korkean tason kielten haittana on, että ne ovat vähemmän tehokkaita kuin Assembly-kielet. Koska yksi korkean tason kielen lause käännetään moniin konekielisiin lauseisiin.
Korkean tason kielet voidaan edelleen luokitella seuraavasti:
-
Toiminnalliset kielet: Toiminnallisella kielellä ohjelma on jaettu toimintomäärittelyihin. Toiminnalliset kielet ovat eräänlainen julistava kieli. Ne perustuvat enimmäkseen vakiotyyppiseen lambda-laskentaan. Jotkut kuuluisista Function-kielistä ovat Scala, F #, Clojure ja Lisp.
-
iv Menettelykielet: Menettelykielillä ohjelma kirjoitetaan kielellä vaiheiden sarja, jota tulisi noudattaa tuloksen tuottamiseksi. COBOL, FORTRAN ja C ovat joitain menettelykieliä.
-
iv olio-ohjelmointikielet: OOP-kielillä ohjelma on jaettu objektiin, jotka sisältävät tietoja, sekä menetelmiin, jotka toimivat tietojen perusteella. Java, C # ja C ++ ovat OOP-kieliä.
-
iv Logiikan ohjelmointikielet: Loogisia kieliä käytetään ohjelmien luomiseen, jotka mahdollistaa tietokoneen perustella loogisesti. esim .: logiikkakieli
Katso perusteellinen tutkimus:
vastaus
Minulla on tapana ajatella ominaisuuksien suhteen:
Syntaksi:
C-pohjainen tai mikä sinulla on. Javalla on C-pohjainen syntakse. Suosittelen ehdottomasti kokeilemaan jotain Python- tai Ruby-tyyliä saadaksesi pään pois syntaksista ja ajattelemaan enemmän tietyn kielen perustekijöistä. Olen sitä mieltä, että minkään syntaksin ei tarvitse olla suurempi kuin C-pohjainen, eikä siinä ole mitään ongelmaa rakentaa lohkoja tyhjätilan ympärille.
Käännetty vs. tulkittu w.Kehitysprosessi vs. tulkittu / konsoli:
Tunnen hyvin vähän käännösaika- ja ajoaikaympäristöongelmia, mutta saan sen ymmärtää siellä on koko joukko huolenaiheita, joista ajattelen harvoin.
Samoin on paljon tulkittuja kieliä, joilla on vielä jotain kääntämisprosessia virtuaalikoneen sisällä ajamiseksi, kuten Java. Sinun täytyy vielä rakentaa uudelleen, jotta näet asioiden muutokset.
Ja sitten on JavaScript ja Python, jotka voit suorittaa lennossa, komento komentolla konsolissa elävässä ympäristössä. Kaikki kolme voivat johtaa hyvin erilaisia tapoja kirjoittaa koodi.
Dynaaminen vs. tiukka kirjoittaminen:
Minulla on tapana nähdä nämä kaksi muotoilun kompromissina. Kun olet paljon alemmalla tasolla ja suorituskyky on kriittinen, staattisella kirjoittamisella on paljon järkeä. En ole koskaan ymmärtänyt tätä käsitystä ”turvallisemmasta” kuin toisesta jollain tavalla, mutta minä tuli hyvin muovisella / dynaamisella kielellä, jossa opit vain, miten kirjoitusjärjestelmä toimii ja mitä periaatteessa odottaa. Tyyppi shenanigans ovat harvoin huolestuttavia minulle JS: ssä. Joillakin tavoin joustavuus voi tehdä asioista vankkoja, vaikka tosin onkin kosketusnäyttävämpi Jr.-tason kehitykselle, jos et tiedä joistakin kielen pot-reikistä.
Lohkotason laajuus vs. toiminnon laajuus vs.?:
Lohkotaso on yleisin (kaikki välillä {} useimmissa c-pohjaisissa syntaksikielissä). JavaScript-laajuus on rakennettu toimintojen ympärille (joita käytetään myös esineiden rakentamiseen niin tehokkaasti esineitä). Sisäisestä laajuudesta on myös paljon vaihtelua. ulommalle ulottuvuudelle. En ole perehtynyt muihin laajennussuunnitelmiin, mutta olen varma, että ne ovat olemassa.
Klassinen OOP vs. prototyyppinen OOP vs. melkein-OOP (rakenteet C: ssä ?) vs Ei-OOP:
Jopa luokkaperusteisessa OOP: ssa on paljon variaatiota. Voitko tehdä useita perintöominaisuuksia (ew, runsaasti, ew), määrittää rajapintoja jne.
Javascriptissa meillä on eräänlainen jumittunut hybridiprototyyppinen OOP, jossa objektit ovat huomattavasti yksinkertaisempia, erittäin muuttuvia, mutta meillä on silti mahdollisuus erottaa käyttöliittymä sisäisistä huolenaiheista, mikä IMO on kapseloinnin tärkeä näkökohta. .
OOP: n asia on, että voit todella vetää paljon tavaroita, jotka ovat olennaisesti OOP-suuntautuneita olematta teknisesti OOP. Tietysti on puristeja, mutta päivän päätteeksi suunnittelukuviot koskevat tiettyjen abstraktioiden saavuttamista, jotka toimivat hyvin tietyissä tilanteissa. Älä ole liian nopea olettaaksesi, että OOP-pohjaisen kielen ideoista ei ole mitään hyötyä prosessiin suuntautuneessa. Enkä puhu Javascriptista. Sitä ei ole lainkaan rajoitettu sen typerällä versiolla prototyyppiin perustuvasta OOP-paradigmasta.
Ensimmäisen luokan toiminnot :
Niiden puuttuminen kielellä on minulle vaikea luopua. Voit siirtää toimintoja ympäriinsä kuin ne olisivat tietoja käytettäväksi muissa yhteyksissä. Tämä tekee erityisesti tapahtumankäsittelyjärjestelmien toteuttamisesta erittäin helppoa, mutta myös kielen mukauttamisen toimimaan haluamallasi tavalla. Enemmän kuin mikään epäilen, JavaScriptistä on tullut menestys että se on lopullinen siitä huolimatta, että se on suunniteltu kahdessa viikossa ja että Java-likimääräinen syntaksia on lyönyt siihen markkinointijärjestelmänä. div id = ”a41202258d”>
En ole varma, missä Java-keskustelu käydään, mutta tiedän, että monet Java-kehittäjät kannattivat tätä ominaisuutta vuosi tai kaksi sitten. Sulkeutumattomalla kielellä, kun toiminto sulkeutuu, kaikki, joka jotenkin pystyy viittaamaan esineisiin kyseisen toiminnon sisältä, ei pääse siihen, koska se oli kerätty roskia. Sulkemisessa suoritusyhteys on sidottu siten, että jos ”pystyt viittaamaan suljetun toiminnon sisällä oleviin asioihin toisesta laajuudesta, kuten palautetusta objektista tai toiminnosta, saat periaatteessa ne variat, jotka olivat toiminnon sulkeutuessa. Se on kuin juuttuminen jalkasi roskakorin oveen, vaikka epäilen, että se on toteutettu enemmän kuin kopiot näistä muunnelmista, jotka on tehty viittaavan yksikön paikallisiksi muunnelmiksi.
Jäykkä / Tiukka / Turvallinen vs. antamalla sinulle kaikki haluamasi köysi:
JS- ja Java-devit eivät yleensä ymmärrä toisiaan muuta ollenkaan, ja mielestäni sillä on paljon tekemistä sen kanssa, että nämä kaksi kieltä putoavat lähes vastakkaisille puolille tätä erityistä suunnittelupektriä. En halua sinun suojaavan minua itseltäni tai muilta tiimini kehittäjiltä. Haluan tehdä paljon enemmän paljon vähemmän koodilla ja tehdä kaiken hyvin eri tavoin (mutta johdonmukaisia tietylle verkkotunnukselle) riippuen Molemmille on ehdottomasti kompromisseja, ja monet kielet yleensä putoavat enemmän keskelle.
Kommentit
- Kiitos. Se ' on todella mukavaa käydä läpi alasäänestys ilman selitystä.
Vastaa
Luulen, että pikavalinta kaikkiin näihin tarkoituksiin on oppia tarpeeksi Lispä tekemään joitain puolihyödyllisiä asioita. Suurin osa näistä paradigmoista alkoi tapana käyttää Lispiä, joten se on yksinkertainen tapa kokeilla asioita.
Ympärillä on useita ”erilaisia” kieliä, mutta uusia voi aina esiintyä. Pohjimmiltaan kielen tarkoitus on sallia ideoiden, käsitteiden tai vaatimusten koodaus mahdollisimman suoraan. Tätä varten voi olla tilanteita, joissa nykyiset paradigmat haluavat, ja saatetaan tarvita uutta.
Yksi tapa tarkastella on pintarakenne. Kuinka suoraan sen avulla voit koodata ideoita ytimekkäästi, joten jos muutat mieltäsi haluamastasi, vastaava muutos koodiin on myös helppoa, eikä siinä ole juurikaan mahdollisuuksia ottaa käyttöön vikoja.
Toinen tapa Katsokaa sitä valvontarakenteen kannalta. Kun kieli suoritetaan (jos se on), missä järjestyksessä asiat tapahtuvat, jotta saavutat haluamasi? Esimerkkejä ovat: yksinkertainen suoraviivainen suoritus, rekursio, takaisku, rinnakkaisuus. Yksi löydettyni (vaatimaton yskä) oli differentiaalinen suoritus .
Toinen hyödyllinen näkökulma on, että milloin tahansa tietorakenne suunnitellaan, kieli on syntynyt. Tiedot ”suorittavat” sovellusohjelmat, jotka kamppailevat sen läpi ja tekevät asioita, aivan kuten ohjelma on vain joukko tietoja (kuten tavukoodeja), joita tulkki käyttää asioihin.
Kommentit
- siistiä. Opin LISP: n ja valaistun. Jännittävää: D
- Jos kuitenkin sanot, että tietorakenteen käyttö luo uuden välikielen, voit myös väittää, että jokaisessa algoritmissa syntyy uusi kieli (kaikki operaatiot tehdään välttämättä tietoihin rakenne), ja pienennettäessä uusi kieli syntyy jokaiselle koodiriville. Luulenpa, että tarkoitat jotain muuta, mutta en ' ole varma, ymmärränkö vielä?
- @sova: Minulle informaatioteoria oli suuri paljastus (sekä Shannon että Kolmogorov). Se ' kertoo kuinka merkitykset koodataan ja siirretään kanavien kautta käsitteillä kaistanleveys, virheen havaitseminen, minimaalinen koodaus, satunnaisuus jne. Joten data koodaa tietoa ja algoritmit ovat kanavia . Ohjelmat koodaavat tietoa, ja ohjelmointi on kanava. Joten mitä tietoja koodataan? mistä se tulee ja milloin? minne se menee? mitkä ovat virheiden lähteet (melu)? miten ne korjataan? Huomasin, että hyödyllinen näkökulma.
- @sova: (jatkuu) Sinun ei ' tarvitse hallita kaikkea matematiikkaa. Minulle tärkeätä oli se kehys, jonka se antoi minulle asioiden miettimiseen.
Vastaus
Minun on lisää, että tietyille sovelluksille on ohjelmointikieliä. Tulee mieleen APT (automaattinen ohjelmoitu työkalu), jota käytetään työstökoneiden valmistuksessa.
Kommentit
- Muistan sen. Olen ehkä jopa käyttänyt sitä. Poika, se oli huipputekniikkaa. Sinun ei tarvinnut ' ohjata jyrsintä manuaalisesti, paina vain käynnistyspainiketta. Ja jos siellä olisi virhe, kaikki helvetti irtoaisi.
- Olen ' työskennellyt ohjelmien parissa, jotka tuottavat gcode jyrsinkoneille. Olen ' kirjaimellisesti pitänyt ja nähnyt ohjelmointivirheiden tuloksia, usein minun.
- Vietin 20 vuotta asentamalla jälkiprosessoreita järjestelmien paloihin.