eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCarnegie-Mellon przestaje uczyc programowania obiektowegoRe: Carnegie-Mellon przestaje uczyc programowania obiektowego
  • Data: 2011-04-15 16:17:57
    Temat: Re: Carnegie-Mellon przestaje uczyc programowania obiektowego
    Od: Jędrzej Dudkiewicz <j...@n...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 04/15/2011 06:05 PM, p...@p...onet.pl wrote:
    >> On 04/15/2011 03:00 PM, fir wrote:
    >
    >>> nigdy sie nad tym nie zastanawialem ale nasuwa mi sie pytanie
    >>> czy przypadkiem nie lepiej by bylo gdyby tych uchwytow nie bylo
    >>>
    >>> to jest oddzielna kwestia ale np co do plikow to mozna powiedziec
    >>> ze nazwa pliku identyfikuje plik tak ze powstaje pytanie czy zamiast
    >>> uzywac tych uchwytow
    >>>
    >>> h = openFile("yoman.txt");
    >>> printToFile(h, "jedna rzecz dzis ustalmy");
    >>> closeFile(h);
    >>>
    >>> nie lepiej byloby uzywac nazw
    >>>
    >>> openFile("yoman.txt");
    >>> printToFile("yoman.txt", "jedna rzecz dzis ustalmy");
    >>> closeFile("yoman.txt");
    >>
    >> W tym momencie uchwytem jest nazwa pliku. Jedyne, co "zyskałeś", to
    >> strata na szybkości, bo tę nazwę trzeba rozwiązywać na obiekt w systemie.
    >>
    >> JD
    >
    > absolutnie nie, nazwa zastepuje uchwyt ale uchwytu nie ma,
    > - plik i tak ma nazwe, i w podejsciu z uchwytami jest i nazwa
    > i uchwyt - nowy byt ktory ma typ wartosc i rzadzace nim prawa

    Absolutnie tak, plik ma nazwę, która jest niczym innym jak czytelną dla
    człowieka nazwą. Uchwyt do zasobu jest po prostu rozwiązaną nazwą. Zwróć
    uwagę, że te Twoje metody należałoby zaimplementować w C mniej więcej tak:

    void openFile(char* name)
    {
    FILE *f = fopen(name, "w"); // załóżmy, że taki tryb
    storeInGlobalTable(name, f); // zapisz nazwę zamapowaną na FILE
    }

    void printToFile(char* name, char* msg)
    {
    fprintf(getFromGlobalTable(name), "%s", msg);
    }

    void closeFile(char* name)
    {
    fclose(getFromGlobalTable(name));
    storeInGlobalTable(name, NULL);
    }

    Cały czas "f", będące niczym innym jak uchwytem, jest potrzebne - tyle,
    że zostało zakopane niżej.

    JD

    PS. Jest jeszcze alternatywna implementacja:

    void openFile(char* name) { }
    void closeFile(char* name) { }
    void printToFile(char* name, char* msg)
    {
    FILE* f = fopen(name, "w");
    fprintf(f, "%s", msg);
    fclose(f);
    }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: