Zakodowane i dekodowane dane
Aby wysyłać dane za pośrednictwem nośnika komunikacyjnego, takiego jak linia telefoniczna, dane muszą być serializowane— czyli konwertowane na ciągi i zera, które są przesyłane szeregowo przez linię. Serializacja musi być wykonywana w taki sposób, aby komputer odbierający dane mógł przekonwertować dane z powrotem na oryginalny format. Sposób wykonywania serializacji jest nazywany protokołem komunikacyjnymi jest kontrolowany przez zarówno oprogramowanie, jak i sprzęt transmisji danych. Istnieje kilka poziomów, na których dane są konwertowane. Poniższa ilustracja przedstawia znacznie uproszczony widok warstw protokołu komunikacyjnego.
Na powyższej ilustracji przedstawiono warstwę aplikacji na komputerze #1 wysyłającą dane do przesyłania (zwykle składa się z pewnej kombinacji znaków tekstowych i liczb) do warstwy kodowania/dekodowania. Warstwa kodowania/dekodowania koduje dane do strumienia bajtów komputerów. Na najniższym poziomie warstwa sprzętowa sprzętu konwertuje bajty danych na strumień szeregowy tych i zer przesyłanych przez linię do komputera nr 2. Warstwa sprzętowa komputera #2 konwertuje te i zera z powrotem na bajty komputerów i przekazuje je do warstwy kodowania/dekodowania na potrzeby dekodowania. Warstwa kodowania/dekodowania dekoduje bajty z powrotem do ich oryginalnego formatu i przekazuje dane do warstwy aplikacji.
Akceptowana zasada projektowania oprogramowania polega na użyciu abstrakcji, czyli procesu opisywania problemu lub obiektu pod względem jego ogólnych parametrów, a nie opisywania wszystkich szczegółów niezbędnych do rozwiązania problemu lub opisywania wszystkich szczegółów obiektu. Korzystając z abstrakcji, projektant może określić obiekt oprogramowania, który ma określone cechy bez obawy, w jaki sposób obiekt jest rzeczywiście implementowany w kodzie oprogramowania. Taka praktyka pozostawia otwartą implementację. Upraszcza również specyfikację i umożliwia określenie aksjomów dotyczących obiektu, który można udowodnić podczas implementowania obiektu. Te aksjomy można następnie przyjąć, gdy obiekt jest używany w innym obiekcie wyższego poziomu. Abstrakcja jest znakiem rozpoznawczym większości współczesnych specyfikacji oprogramowania.
Większość protokołów komunikacyjnych obejmuje wiele abstrakcji. Obiekty w wyższych warstwach są definiowane abstrakcyjnie i mają być implementowane przy użyciu obiektów w niższych warstwach. Na przykład usługa w jednej warstwie może wymagać transferu niektórych abstrakcyjnych obiektów między komputerami. Warstwa niższego poziomu może używać reguł kodowania do przekształcania abstrakcyjnych obiektów w ciągi tych i zer.
Jedną z typowych metod określania obiektów abstrakcyjnych przeznaczonych do przesyłania seryjnego jest notacja składni abstrakcyjnej jeden (ASN.1). Usługa ASN.1 jest zdefiniowana w rekomendacji CCITT X.208. Jeden zestaw reguł ASN.1 do reprezentowania takich obiektów jak ciągi i zer jest nazywany reguły kodowania wyróżniającego (DER) i jest zdefiniowany w rekomendacji CCITT X.509, Sekcja 8.7. Są to metody kodowania używane obecnie przez cryptoAPI.
Aby uzyskać więcej informacji na temat funkcji kodowania/dekodowania, zobacz kodowanie obiektów i dekodowanie funkcji.