• 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++

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+3 głosów
3,026 wizyt
pytanie zadane 20 czerwca 2021 w C i C++ przez Martita Bywalec (2,520 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,520 p.)
patrząc w kod
1
komentarz 20 czerwca 2021 przez reaktywny Nałogowiec (44,780 p.)
:)

Szukaj słówka class w kodzie :)

2 odpowiedzi

+4 głosów
odpowiedź 20 czerwca 2021 przez tangarr Mędrzec (155,140 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,520 p.)
Możesz podać przykładowy kod strukturalnego i ten sam problem obiektowy?
komentarz 20 czerwca 2021 przez Oscar Nałogowiec (29,340 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 (278,710 p.)
goto nie łamie programowania strukturalnego, automaty nieskończone, niedeterministyczne są pisane strukturalnie :)
0 głosów
odpowiedź 20 czerwca 2021 przez Benek Szeryf (92,970 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,520 p.)
czyli do main kod jest taki sam.
komentarz 20 czerwca 2021 przez Benek Szeryf (92,970 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 (278,710 p.)

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

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

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

komentarz 20 czerwca 2021 przez Benek Szeryf (92,970 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,340 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 (278,710 p.)
tylko że programowanie obiektowe jest to programowanie strukturalne i proceduralne też :)

Podobne pytania

0 głosów
2 odpowiedzi 215 wizyt
+3 głosów
2 odpowiedzi 4,691 wizyt
0 głosów
4 odpowiedzi 3,740 wizyt

93,187 zapytań

142,203 odpowiedzi

322,017 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2164p. - Adrian Wieprzkowicz
  10. 2006p. - Michal Drewniak
  11. 1901p. - Mikbac
  12. 1806p. - Dawid128
  13. 1744p. - rafalszastok
  14. 1734p. - Anonim 3619784
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...