Ankündigung

Einklappen
Keine Ankündigung bisher.

Algorithmierung : Funktionale Programmierung? OOP?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Algorithmierung : Funktionale Programmierung? OOP?

    Hi Leude,

    ich hab ein etwas komplexes Problem aus dem Fachbereich Elektronik. In erster Linie geht es mir noch um die Lernphase, bevor ich mich an die Planung und Implementierung wage.
    Im Konkreten habe ich Ein Objekt im Sinne der Elektronik, dass zwar Eigenschaften besitzt , wie z.b. "innerer elektrischer Widerstand", aber es besteht immer eine Abhängigkeit zu anderen Objekten in einer Schaltung, sodass es auf keinen Fall möglich ist auf normalen Wege daran Berechnungen anzustellen. Es ist also so, das z.b. um an 2 Punkten einer Schaltung die Spannung oder den Strom zu messen, man jedes Objekt kennen muss, das insgesamt ein Netzwerk ergibt.

    Nun kann man aber nicht jeder erdenkliche Schaltung erstellen sondern soll auf einem Layout z.b. beliebige Objekte platzieren, die unterschiedliche "Widerstände" besitzen, um dann Berechnungen durchzuführen.

    Gibt es hier jemanden aus der Ingenierswelt, der hier schon Ansätze hat, wie man das Grundsätzlich angehen kann?
    Meine Vermutung liegt in Richung Funktionale Programmierung, wobei ich damit in PHP noch nie was praktisches unternommen habe.




  • #2
    sodass es auf keinen Fall möglich ist auf normalen Wege daran Berechnungen anzustellen
    Was soll denn das für ein normaler Weg sein?

    Aus der Beschreibung hier spricht meiner Meinung nach nichts gegen OOP.
    Grob sehe ich hier:
    - Elektronik Objekte (deine Wortwahl), vermutlich als abstrakte Klasse von der du deine spezifischen Objekte ableitest.
    - Netzwerk, kennt die anderen Objekte und kann deine "Berechnungen" anstellen.

    Nun kann man aber nicht jeder erdenkliche Schaltung erstellen sondern soll auf einem Layout z.b. beliebige Objekte platzieren, die unterschiedliche "Widerstände" besitzen, um dann Berechnungen durchzuführen.
    Wenn du hier eine dynamische Anwendung vor Augen hast ist Php sicher nicht das beste Mittel. Javascript bietet sich dafür mehr an, ggf. mit entsprechendem Framework.

    Kommentar


    • #3
      Problem ist hier nicht die Objekteigenschaft sondern die Mathematischen Beziehungen. Ein Objekt, egal welches, nimmt auf alle Objekte der Schaltung Einfluss. Daher ist ein typische Kapselung nicht realistisch. Und dann hängt es noch von der Art der Schaltung ab.

      z.B.:
      2 Objekte Parallel -> Strom Teilt sich auf
      2 Objekte Reihenschaltung -> Strom verringert sich
      usw. die mathematischen Details hab ich mal weggelassen. Richtig komplex wird es dann wenn Querverbindungen in einer Schaltung sind. Zwar kann ich jedem Objekt Ein- und Ausgang geben, aber es muss auch immer wissen in welcher Beziehung es mit der Außenwelt steht.

      Den Stromfluß kann man sich wie den Wasserfluss in Leitungen vorstellen, den widerstand wie Ventile. Hier wären die Ventile in Ihren Eigenschaften die Objekte Bauteil-Wiederstand. Das Problem ist also nicht unbedingt der Widerstand selber sondern wie man den Weg findet wo sich der Strom gabelt und wieder zusammenfließt. Das Reine Objekt weiss aber nichts von anderen Objekten und kennt nur den ankommenden Strom.

      Kommentar


      • #4
        Im Konkreten habe ich Ein Objekt im Sinne der Elektronik, dass zwar Eigenschaften besitzt , wie z.b. "innerer elektrischer Widerstand", aber es besteht immer eine Abhängigkeit zu anderen Objekten in einer Schaltung, sodass es auf keinen Fall möglich ist auf normalen Wege daran Berechnungen anzustellen.
        AFAIK stimmt das so nicht, sonst könnte man ja gar nichts berechnen. Die Bauteile haben sehr wohl einen intrinsischen Widerstand, was dich interessiert ist aber der Spannungs-/Stromabfall an dem Bauteil in einer Schaltung (wofür es ja Formeln gibt). Das sind dann aber auch keine Eigenschaften der Bauteile mehr, sondern der Schaltung.

        Kommentar


        • #5
          aber es muss auch immer wissen in welcher Beziehung es mit der Außenwelt steht.
          Wieso?
          Deine einzelnen Objekte ändern sich doch nicht durch das hinzufügen eines weiteren Objektes, dein Netzwerk bzw. das Verhalten der Objekte im Netzwerk hingegen schon.
          Deine Außenwelt ist das Netzwerk / die Schaltung. Diese kann doch problemlos alle (Elektronik) Objekte und die Beziehungen zwischen diesen kennen.

          Kommentar


          • #6
            Stimmt, das Bauteil ändert sich selber nicht, aber das Netzwerk. Ok, diese Fragerunde hat mir bei der Analyse schon etwas geholfen.

            Dann ist also eher die Frage für mich offen, wie letztlich die Bauteile das Netzwerk beeinflussen?

            Ich vermute jetzt mal wild, dass hier eine funktionale Abhängigkeit entsteht, je nachdem welche Messpunkte im Netzwerk genutzt werden. Aber ich glaub im Moment ist das echt kompliziert was allgemeines zu erzeugen. Klar, wenn man nur eine Schaltung betrachtet ist die Berechnung billiger Scheiß . R = U/I blabla .. , aber die Änderbarkeit macht es eben so kompliziert.

            Nachtrag. Physikalisch betrachtet gibt es noch Objekte Messpunkt, von den immer 2 eine sinnvolle Beziehung haben. Von Ihnen fließen Strompfade über die Bauteile zueinander, solange keine Unterbrechung auf dem Weg existiert. .z.b Schalter ect. Eine weitere Einflussquelle der Messpunkte sind die Punkte, wo die Spannung angelegt wird. Die Messpunkte können selbst beliebige Abzweige besitzen. Im schlimmsten fall Jeder Punkt mit jedem verknüpfte sein, über Bauteile oder ohne.

            Kommentar


            • #7
              Wenn man das Ganze aufs Wesentliche reduziert, hast du im Prinzip "Bauteile" mit einem Input und einem Output (fürs erste). Je nach Eigenschaften des Bauteils (Widerstand, etc.) verändert sich der Output. Hier mal ein Ansatz auf dem du sicherlich aufbauen kannst: https://eval.in/911630.

              PHP-Code:
              <?php

              interface FlowThroughInterface{
                public function 
              flowThrough(float $power): float;
              }


              class 
              Component implements FlowThroughInterface{
                private 
              $resistance 0;

                public function 
              __construct(float $resistance){
                  
              $this->resistance $resistance;
                }

                public function 
              flowThrough(float $power): float{
                  return 
              $power $this->resistance;
                }
              }


              class 
              Circuit implements FlowThroughInterface{
                private 
              $components = [];

                public function 
              add(Component $component){
                  
              $this->components[] = $component;
                }

                public function 
              flowThrough(float $power): float{
                  return 
              array_reduce($this->components, function($powerFlowThroughInterface $component){
                    return 
              $component->flowThrough($power);
                  }, 
              $power);
                }
              }


              // usage
              $circuit = new Circuit();
              $circuit->add(new Component(1));
              $circuit->add(new Component(1));
              $circuit->add(new Component(1));

              $output $circuit->flowThrough(20);
              echo 
              'Input: 20, Output: ' $output;
              Um sinnvolles Wording, korrekte Berechnungen etc. darfst du dich natürlich selbst kümmern
              [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

              Kommentar


              • #8
                Wenn es wirklich um eine Schaltungssimulation im Bezug auf Ströme/Spannungen geht, ist das ganze wahrscheinlich etwas komplizierter. Im Internet findet man Listen mit einigen Implementierungen. Ich denke die Variante von lottikarotti funktioniert nur für sehr einfache, einsträngige Aufbauten. Und noch eine kleine Anmerkung: "2 Objekte Reihenschaltung -> Strom verringert sich " Das ist so glaube ich nicht richtig, in einer Reihenschaltung beleibt der Strom gleich, wo soll er auch hinfließen?

                Kommentar


                • #9
                  Zitat von alxy Beitrag anzeigen
                  Wenn es wirklich um eine Schaltungssimulation im Bezug auf Ströme/Spannungen geht, ist das ganze wahrscheinlich etwas komplizierter. Im Internet findet man Listen mit einigen Implementierungen. Ich denke die Variante von lottikarotti funktioniert nur für sehr einfache, einsträngige Aufbauten. Und noch eine kleine Anmerkung: "2 Objekte Reihenschaltung -> Strom verringert sich " Das ist so glaube ich nicht richtig, in einer Reihenschaltung beleibt der Strom gleich, wo soll er auch hinfließen?
                  Ich bin wahrlich kein Elektroniker deshalb ist es sogar absolut wahrscheinlich, dass mein Beispiel physikalisch ziemlicher Käse ist. Um komplexere Schaltungen abzubilden ist natürlich noch Arbeit notwendig. Ich wollte dem TE einfach einen Ansatz für einen ersten Schritt bieten. Das Ganze weitergedacht wird vermutlich nicht mehr viel mit meiner "Vorlage" zu tun haben.
                  [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                  Kommentar


                  • #10
                    Wenn du (TE) sowas wirklich selber erstellen willst, kannst du dir z.B. das Konzept von Tokenizing ansehen. Dabei wird jedes Element in ein Token umgewandelt. Damit liessen sich auf eher einfache Art und Weise hierarchische Gebilde (ein Schaltkreis ist ja grundsätzlich nichts anderes) abbilden und berechnen.
                    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                    Kommentar

                    Lädt...
                    X