Avatar billede danielhep Nybegynder
25. maj 2004 - 21:26 Der er 12 kommentarer og
1 løsning

Funktion vs objekt

hey

hvad kan man ikke udvikle i OOP, som man kan i funktion baseret, og omvendt ?
Avatar billede arne_v Ekspert
25. maj 2004 - 21:34 #1
Ingenting.

Static metoder i klasser svarer helt til funktioner så derfor kan man godt
lave procedural programmering i et objekt orienteret sprog. C++ har funktioner.
Men i Java og C# bruger man bare static metoder.

Dybest set består en klasse af data felter og nogle funktioner hvor der
et skjult argument til data (plus nogle function pointere til at implementere
virtuelle metoder med). Den første C++ compiler oversatte ikke til
assembler eller binær kode, men til C kode. Så man kan godt lave objekt orienteret
programmering i C. Det er bare ikke specielt kønt.

Vi kan vist godt slå fast at OOP er blevet alment accepteret idag som en
god ting. Så kan man diskutere om det er en erstatning eller et supplement
til procedural programmering (jeg hælder nok mest til det sidste).

Nogle problem stillinger udnytter bedre OOP end andre.
Avatar billede Slettet bruger
25. maj 2004 - 21:35 #2
Man kan det samme, der er bare nogle ting som er lettere at udvikle i Objekt Orienterede Programmeringssprog....

Grunden til man bruger OOP, er at det er forholdsvist nemt at objektivere ting... Altså hvis man skal lave et regnskabsprogram vil det give forholdsvis meget mening at lave objekter (eller klasser) som hedder "Faktura", "Momsafregning" osv osv...
Avatar billede danielhep Nybegynder
25. maj 2004 - 21:36 #3
arne_v...vil du vise en lille eksemplen på OOP i C ... : = )
Avatar billede Slettet bruger
25. maj 2004 - 21:36 #4
giver arne_v ret.... damn, kunne ikke lige komme på ordet "procedural"... æv æv æv... giv bare ham pointene, hans svar er stort set som jeg ville ha' lavet et, hehe :-)
Avatar billede danielhep Nybegynder
25. maj 2004 - 21:37 #5
ok corholio....
Avatar billede arne_v Ekspert
25. maj 2004 - 21:46 #6
Jeg laver lige et lille eksempel.
Avatar billede danielhep Nybegynder
25. maj 2004 - 21:52 #7
ok, takker :)
Avatar billede arne_v Ekspert
25. maj 2004 - 22:09 #8
#include <stdio.h>

struct A
{
  int va;
  void (*f1)(struct A *a);
};

struct B
{
  int va;
  void (*f1)(struct A *a);
  int vb;
};

void constructorA(struct A *a)
{
    a->va = 123;
    a->f1 = NULL;
}

void f1B(struct A *a);

void constructorB(struct B *b)
{
    constructorA((struct A *)b);
    b->f1 = f1B;
    b->vb = 456;
}

void f1B(struct A *a)
{
    printf("%d\n",a->va);
}

void f2(struct B *b)
{
    printf("%d\n",b->vb);
}

int main()
{
    struct B *b = (struct B *)malloc(sizeof(struct B));
    constructorB(b);
    b->f1((struct A *)b);
    f2(b);
    free(b);
    return 0;
}
Avatar billede arne_v Ekspert
25. maj 2004 - 22:09 #9
#include <iostream>

using namespace std;

class A {
  public:
      int va;
      A();
      virtual void f1() = 0;
};

class B : public A
{
    public:
      int vb;
      B();
      virtual void f1();
      void f2();
};

A::A()
{
    va = 123;
}

B::B()
{
    vb = 456;
}

void B::f1()
{
    cout << va << endl;
}

void B::f2()
{
    cout << vb << endl;
}

int main()
{
    B *b = new B();
    b->f1();
    b->f2();
    delete b;
    return 0;
}
Avatar billede arne_v Ekspert
25. maj 2004 - 22:10 #10
Koden gør det samme.

Men C++ versionen er lidt kønnere end C versionen.

Og nemmere at vedligeholde.
Avatar billede danielhep Nybegynder
25. maj 2004 - 22:12 #11
he he...takker
Avatar billede jakoba Nybegynder
26. maj 2004 - 07:05 #12
Jeg er lidt uenig her. 'funktions baseret' refererer ikke til sekventielle sprog som C og C++, men snarere til sprog som Lisp, Forth og ML.

Noget andet er så at arne_v har helt ret i at alle sprogene kan alting. Nogen gør det blot lidt nemmere end andre :-))

mvh JakobA
Avatar billede arne_v Ekspert
26. maj 2004 - 08:19 #13
Det er da muligt at jeg har misforstået spørgsmålet.

Jeg troede at det var C versus C++ og Java.

Funktion som i C funktion.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester