Hvad er forskellen mellem Funktionel programmering og Objektorienteret programmering?


Svar 1:

De programmerer paradigmer eller stilarter af programmering. Deres definitioner er lidt hurtige og løse, men dybest set:

  • objektorienteret programmering (OOP) fokuserer på at nedbryde en programmeringsløsning til objekter (sammenhængende enheder, der består af privat tilstand eller data, samt metoderne eller funktionerne, der fungerer på dataene). Funktionel programmering (FP) fokuserer på at nedbryde en programmering løsning til rene funktioner, der kan videregives som argumenter og returneres fra andre funktioner.

Efter nogle definitioner skal FP også gifte sig med uforanderlighed (variabler eller tilstand ændres muligvis ikke, når den er initialiseret). Funktioner skal være referencemæssigt gennemsigtige (for de samme input-argumenter er returværdien altid den samme).

Efter nogle definitioner skal OOP også understøtte arv (objekter kan få de samme data og metoder fra dets overordnede objekt).

OOP skal også understøtte polymorfisme (metoden eller funktionsnavnet kan henvise til et antal forskellige funktioner, og valget af, hvilken man skal ringe til, foretages på baggrund af det objekt, der kalder det).

Den væsentligste forskel mellem de to er polymorfisme. Ellers er der praktisk taget ingen forskel i, hvordan funktioner kaldes:

f (o); // funktionel af (); // objektorienteret

De to systemer er perfekt ortogonale og kan derfor bruges sammen. De er kompatible!


Svar 2:

Ingen af ​​begreberne er særlig veldefinerede, fordi hvis man ser på de mange sprog, der hævder at være i en bestemt kategori, har man en tendens til at finde ligheder og forskelle, der gør grænserne ret vanskelige at skelne. Så hvad jeg vil sige er på et højere niveau end programmeringssprog og går mere i retning af programmeringsfilosofi.

I software engineering er et centralt mål at nedbryde et problem i håndterbare enheder. Disse håndterbare enheder kan kaldes moduler eller komponenter eller have et mere specifikt navn inden for et bestemt paradigme. For kortfattethedens skyld vil jeg henvise til dem som moduler. I princippet er målet med modularitet det samme, at øge sammenhængen og reducere koblingen.

I funktionel programmering er den modulære enhed en funktion, og i objektorienteret programmering er den modulære enhed en klasse. Overordnet funktionel programmering koncentrerer sig om at komponere funktioner, mens objektorienteret programmering har et større fokus på at skjule implementeringsdetaljer for at reducere koblingen.

Der er mange andre ting, der kan siges, men de er tilbøjelige til at falde i de områder, hvor grænserne er mindre klare.


Svar 3:

For at besvare dette spørgsmål fuldstændigt, skulle det faktisk meget længe, ​​og du forstår faktisk faktisk ved at udføre både OOP og funktionel programmering, og det tager tid, kan være flere måneder eller par år.

Men kort sagt kan jeg lide denne sammenligning fra en berømt leder på vores felt

OO gør koden forståelig ved indkapsling af bevægelige dele. FP gør koden forståelig ved at minimere bevægelige dele.

Så i OOP beskæftiger du dig med indkapsling, arv og polymorfisme. Førsteklasses borger i oop verden er genstande. Du skjuler staterne i en klasse og leverer mutator til verdener udenfor. Mens de er i funktionel programmering, er de grundlæggende koncepter uforanderlige, rene funktioner, funktionskomposition og højordefunktioner. Og den første klasses borger er funktion.