Olio-ohjelmointi (object-oriented programming, OOP) on yksi ohjelmointiparadigma, mutta on olemassa useita muitakin paradigmoja, jotka tarjoavat vaihtoehtoisia tapoja lähestyä ohjelmistokehitystä. Tässä joitakin yleisiä vaihtoehtoja olio-ohjelmoinnille:
Kannattaa kuitenkin huomata, että monilla ohjelmointikielillä on piirteitä, joiden perusteella ne voidaan sijoittaa useamman allamainitun kategorian alle. Esimerkiksi C# on alla laitettu kategoriaan Tapahtumapohjainen ohjelmointi. C# on kuitenkin myös olio-ohjelmointi kieli.
Perustuu matemaattisiin funktioihin, joissa korostetaan tilattomuutta ja immuuttisuutta (muuttumattomia tiloja).
Esimerkkejä toiminnallisista kielistä: Haskell, Lisp, Erlang, Clojure, F#.
Ohjelmat jaetaan sarjaksi ohjeita tai proseduureja (funktioita tai aliohjelmia), jotka suorittavat tehtäviä yksi kerrallaan.
Esimerkkejä: C, Pascal, Python (Python tukee myös muita paradigmoja, mutta se on vahvasti proseduraalinen).
Perustuu logiikkaan ja predikaatteihin. Ohjelmat muodostetaan loogisista väitteistä ja säännöistä, ja ohjelmointikieli päättää, kuinka ongelma ratkaistaan.
Esimerkkejä: Prolog, Datalog.
Keskittyy siihen, mitä ohjelman tulisi tehdä, eikä siihen, miten se tehdään. Ohjelmoija kuvaa lopputuloksen, ja järjestelmä vastaa toteutuksesta.
Esimerkkejä: SQL, HTML, CSS.
Ohjelman suoritus määräytyy tapahtumien perusteella, jotka voivat olla käyttäjän syötteitä, laitteistotapahtumia tai viestejä muista ohjelmista.
Esimerkkejä: JavaScript (selaimessa), C# (Windows Forms).
Tässä lähestymistavassa ohjelman toiminnallisuus jaetaan eri "aiheisiin" (aspekteihin), kuten lokitukseen tai virheenkäsittelyyn, jotka sitten yhdistetään ohjelmaan ilman, että niitä tarvitsee sisällyttää varsinaisiin liiketoimintalogiikkaa sisältäviin luokkiin tai funktioihin.
Esimerkkejä: AspectJ (Java-kielen laajennus).
Ohjelma esitetään solmuina ja reitteinä, jotka kuvaavat tietovirtoja. Ohjelman suoritus riippuu tietovirtojen reitittämisestä.
Esimerkkejä: LabVIEW, VHDL.
Keskittyy ohjelman käyttäytymisen ja ominaisuuksien tarkkaan määrittelyyn ennen toteutusta. Tämä voi auttaa erityisesti kriittisten järjestelmien kehittämisessä.
Esimerkkejä: TLA+, Z-kieli.