• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Różnica między programem strukturalnym a obiektowym C++

Object Storage Arubacloud
+3 głosów
2,562 wizyt
pytanie zadane 20 czerwca 2021 w C i C++ przez Martita Bywalec (2,500 p.)
Witam

Proszę o przykład jakiegoś kodu źródłowego rozwiązujący ten sam problem w sposób strukturalny i obiektowy.

Jak rozpoznać czy program napisany jest strukturalnie czy obiektowo?
komentarz 20 czerwca 2021 przez CubeStorm Pasjonat (15,020 p.)

Jak rozpoznać czy program napisany jest strukturalnie czy obiektowo?

Chcesz go rozpoznać z punktu widzenia zwykłego usera, czy chcesz go rozpoznać patrząc w kod?

komentarz 20 czerwca 2021 przez Martita Bywalec (2,500 p.)
patrząc w kod
1
komentarz 20 czerwca 2021 przez reaktywny Nałogowiec (41,050 p.)
:)

Szukaj słówka class w kodzie :)

2 odpowiedzi

+4 głosów
odpowiedź 20 czerwca 2021 przez tangarr Mędrzec (154,860 p.)
Programowanie strukturalne polega na używaniu struktur takich jak zakresy (bloki kodu), instrukcje warunkowe, pętle oraz funkcji.
Programowanie obiektowe polega na używaniu obiektów, czyli takich struktur które łączą dane z funkcjami. Programowanie obiektowe w C++ również jest programowaniem strukturalnym.
komentarz 20 czerwca 2021 przez Martita Bywalec (2,500 p.)
Możesz podać przykładowy kod strukturalnego i ten sam problem obiektowy?
komentarz 20 czerwca 2021 przez Oscar Nałogowiec (29,320 p.)
Program zgoidny z paradygmatem programowania strukturalnego składa się z bloków, które mają tylko jedne wejście i jedno wyjście. W oczywisty sposób łamie ten paradygmat użycie goto. Takim prawie czystym językiem strukturalnym był oryginalny pascal N. Wirtha. Jednak pisanie w takim języku jest czasami uciążliwe, Stąd w bardziej praktycznych językach (nawet w takich bardziej komercyjnych implementacjach "Pascala") wprowadzono możliwość lokalnego złamania paradygmatu w postaci takich "ograniczonych goto", które łamią strukturalność w danym bloku, ale w bloku piętro lub dwa wyżej strukturalność jest przywracana. Konstrukcje typu break, continue, return. To są takie "specjalizowane goto".
komentarz 20 czerwca 2021 przez Wiciorny Ekspert (270,190 p.)
goto nie łamie programowania strukturalnego, automaty nieskończone, niedeterministyczne są pisane strukturalnie :)
0 głosów
odpowiedź 20 czerwca 2021 przez Benek Szeryf (91,050 p.)

Proszę o przykład jakiegoś kodu źródłowego rozwiązujący ten sam problem w sposób strukturalny i obiektowy.

Przykładem niech będzie włączanie/wyłączanie światła. Kod napiszę w Pythonie, bo język ten jest podobny do pseudokodu. Najpierw przypadek strukturalny:

def switch_light(light_status):
    if light_status is True:
        print("Light is ON")
    else:
        print("Light is OFF")

light = True
switch_light(light)  # Light is ON
light = False
switch_light(light)  # Light is OFF

Obiektowo:

class LightOnState:
    def switch(self):
        print("Light is ON")
        self.new_state = LightOffState()

class LightOffState:
    def switch(self):
        print("Light is OFF")
        self.new_state = LightOnState()

class Light:
    def __init__(self, state):
        self.state = state

    def switch(self):
        self.state.switch()
        self.state = self.state.new_state

light = Light(LightOnState())
light.switch()  # Light is ON
light.switch()  # Light is OFF
light.switch()  # Light is ON

Obiektowo mamy więc przełączanie stanów bez wykorzystania jakiegokolwiek IF-a. Można więc rzecz, że jak dobrze zaprojektujesz relacje między klasami, to możesz uniknąć kodu strukturalnego, chociaż w praktyce bezsensu jest na siłę omijać takie koncepty jak wyrażenia warunkowe czy pętle.

komentarz 20 czerwca 2021 przez Martita Bywalec (2,500 p.)
czyli do main kod jest taki sam.
komentarz 20 czerwca 2021 przez Benek Szeryf (91,050 p.)
Nie. Kod obiektowy w ogóle nie używa wyrażenia warunkowego, przez co odpada manipulowanie flagami, które trzymają stan.
komentarz 20 czerwca 2021 przez Wiciorny Ekspert (270,190 p.)

@Benek,a pierwsze nie jest przypadkiem proceduralne? :)

komentarz 20 czerwca 2021 przez Martita Bywalec (2,500 p.)

@Benek,
 Nie znam pythona proszę kod cały w c++

komentarz 20 czerwca 2021 przez Benek Szeryf (91,050 p.)
Wiciorny, trudno powiedzieć. Według mnie jest strukturalny, bo wydziela pewną logikę do osobnej, niezależnej struktury, czyli chodzi mi o funkcję. Z drugiej strony można powiedzieć, że ta funkcja może być procedurą zmieniającą stan programu. Akurat tak się niefortunnie złożyło, że podany przeze mnie przykład to też klasyczna zmiana stanów.

Te definicje paradygmatów trochę mi się rozmywają. Mogę podać fajny przykład, żeby to zobrazować. Otóż wiemy, że C nie jest językiem obiektowym. Z drugiej strony korzysta on z różnych typów danych jak liczby całkowite, zmiennoprzecinkowe, tablice czy wskaźniki. Każdy ten typ danych ma swoje operacje. Na przykład typy liczbowe można dodawać, ale już operacja modulo nie zadziała z liczbami zmiennoprzecinkowymi. Podobnie operator wyłuskania, który stosuje się tylko do wskaźników. Tak więc w jakimś tam stopniu można powiedzieć, że typy danych są to predefiniowane obiekty, które na podstawie podanego interfejsu mogą wykonywać operacje (interfejsem są operatory wraz z położeniem argumentów względem nich).

Marta, jak nie rozumiesz tego kodu z Pythona, to kodu w C++ tym bardziej nie zrozumiesz.
komentarz 21 czerwca 2021 przez Oscar Nałogowiec (29,320 p.)

To trochę inna para kaloszy - przeciążanie funkcji i operatorów. Nie ma wiele wspólnego z obiektowością. W sumie niektóre dialekty C wprowadzały elementy obiektowości polegające na tym, że jest struktura A jest zawarta zaraz na początku struktury B

struct B
{
    struct A base;
    ...
};

To wskaźnik na B mógł być użyty w miejcu gdzie oczekiwano wskaźnika A. Taka namiastka dziedziczenia.

komentarz 21 czerwca 2021 przez Wiciorny Ekspert (270,190 p.)
tylko że programowanie obiektowe jest to programowanie strukturalne i proceduralne też :)

Podobne pytania

0 głosów
2 odpowiedzi 185 wizyt
+3 głosów
2 odpowiedzi 4,264 wizyt
0 głosów
4 odpowiedzi 3,350 wizyt

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...