Mar 08, 2021, TIL (Today I Learned)


学習内容


デザインモードとは?


設計時によく使われるテンプレート.先輩たちのタックル記録
コード外観
Design Patterns(1994) by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
デザインパターンの意味
  • 各種問題状況に対する予防
  • プログラマー間のコラボレーション効率の向上
  • プログラマー間のコミュニケーションを増進する
  • 安定化および最適化
  • コード
  • コードの再利用性を向上させる
  • 단, 적절히 잘 사용하자設計パターンを手段として、目的地があれば主客転倒する場合があります.
    *指定されたパターンについては、状況に応じて変更する必要がありますが、パターンの設計にこだわると、パターンを柔軟に適用したり変更したりすることはできません.そのため、100%守る必要はありませんが、明確に知れば、やるべきことはたくさんあります.

    Design Patterns vs Architectures


  • アーキテクチャ:大図、ソフトウェア全図
    ex)洋風建築、MVC建築

  • Design Pattern:このアーキテクチャの詳細なソリューション
    ex)現在の状況に適応するために、西洋の建物内の不便な設計部分を修正する.
  • UML (Unified Modeling Language)

  • 構造概略図
  • Class diagram
  • Object diagram
  • Component diagram
  • Deployment diagram
  • 動作を示すグラフ
  • Use Case diagram
  • Sequence diagram
  • Collaboration diagram
  • State-chart diagram
  • Activity diagram
  • 型番管理概略図
  • Package diagram
  • Model diagram
  • Subsystem diagram
  • SWIFTはどの要素を使用してアーキテクチャと設計モードを作成しましたか?


    MVC (Model-View-Controller) Architecture

  • どんな基準で区分されていますか.
  • 画面を使用するかどうか、データを使用するかどうか、中間ブリッジであるかどうかを基準に区分します.

  • 区分基準の要素は何ですか.
    表示される要素はすべてオブジェクトです.

  • モデル、ビュー、およびコントローラ

  • モデル定義処理データ

  • ユーザーが見ているのはviewというエリアに属するinstanceです
    *viewとviewcontrollerは違います!
  • 計算または計算のプロパティは何ですか?


    「プロファイルの格納に加えて、クラス、構造および列挙*は、計算されたプロファイルを宣言することもできます.計算されたプロファイルは、実際の値を格納するのではなく、getterおよびoptionalおよびsetterのメソッドを提供し、値を参照して他のプロファイルの値を間接的に設定します.」
    ソース:プロフェッショナル(Properties)-『Swift言語ガイド』(Gitbook.io)
  • このプロパティは、実際の値を格納するプロパティではありません.特定の状態で値を計算するプログラムだけです.
  • この番組には2つの役割がある.
  • アクセス者(getter)
  • ロール
  • は、インスタンスの内部および外部値を計算し、適切な値を返す役割を果たす.
  • セットアップ
    インバースハイヒール
  • は、非表示の内部のプロパティ値を間接的に設定するために使用されます.

    いったいどうして演算プログラムを書く方法がないのですか。


    メソッドでインスタンス値にアクセスするには、2つのメソッドが必要です.インスタンスにアクセスする方法とインスタンスを設定する方法の2つの方法が実装されるべきであるが、この方法の分散実装により、コードの可読性が低下する可能性があるため、この場合、演算プログラムの作成がより簡便で直感的になる.
    構造例は、本や複数のブログによく登場するため、クラス内の値を特定の状態で異なる値を計算するアクセス者(getter)と設定者(setter)の方法を使用してコードを記述しようとします.
    私は仮想的な財布の状況でコードを書いた.
    やっぱり親にはいいですね.
    import Foundation
    
    class MyWallet {
        var money: Int
        var card: String
        
        init(won: Int, checkCard: String) {
            self.money = won
            self.card = checkCard
        }
        
        func supportFromParents() -> MyWallet {
            return MyWallet(won: 200000, checkCard: "신한카드")
        }
        
        func putMoneyInMyWallet(_ support: MyWallet) {
            money += support.money
            card = support.card
        }
    }
    
    var myProperty: MyWallet = MyWallet(won: 200, checkCard: "신용 카드가 없습니다.")
    
    print("지금 저는 \(myProperty.card) 그리고 제 지갑에는 \(myProperty.money)원 밖에 없습니다. ")
    print("제가 불쌍한지 부모님이 \(myProperty.supportFromParents().card) 그리고 \(myProperty.supportFromParents().money)원을 지원 해 주셨습니다.")
    
    myProperty.putMoneyInMyWallet(myProperty.supportFromParents())
    print("그래서 제 총 자산은 \(myProperty.money)원이 되었고 이제 \(myProperty.card)도 있습니다.")
    
    // 지금 저는 신용 카드가 없습니다. 그리고 제 지갑에는 200원 밖에 없습니다.
    // 제가 불쌍한지 부모님이 신한카드 그리고 200000원을 지원 해 주셨습니다.
    // 그래서 제 총 자산은 200200원이 되었고 이제 신한카드도 있습니다.
    この方法を演算プログラムと比較する.
    class MyWallet {
        var money: Int
        var card: String
        
        init(won: Int, checkCard: String) {
            self.money = won
            self.card = checkCard
        }
        
        var supportFromParents: MyWallet { //연산 프로퍼티
            // 접근자
            get {
                return MyWallet(won: 200000, checkCard: "신한카드")
            }
            // 설정자
            set (support) {
                money += support.money
                card = support.card
            }
          // 매개 변수 이름을 생략한 설정자는 아래와 같이 설정할 수 있다.
            set {
                  money += newValue.money
                  card = newValue.card
              }
        }
    }
    // My Tung Tung empty Wallet
    var myProperty: MyWallet = MyWallet(won: 200, checkCard: "신용 카드가 없습니다.")
    
    // GET financial supoprt from parents, thank God
    print("지금 저는 \(myProperty.card) 그리고 제 지갑에는 \(myProperty.money)원 밖에 없습니다. ")
    print("제가 불쌍한지 부모님이 \(myProperty.supportFromParents.card) 그리고 \(myProperty.supportFromParents.money)원을 지원 해 주셨습니다.")
    
    // SET changes in my Pocket
    myProperty = myProperty.supportFromParents
    
    print("그래서 제 총 자산은 \(myProperty.money)원이 되었고 이제 \(myProperty.card)도 있습니다.")
    // 그래서 제 총 자산은 200000원이 되었고 이제 신한카드도 있습니다.
    get分だと、変わった感じになります.setの部分は変化が適用される値であることを感じた.
    メソッドを使用する場合、アクセス者と設定者を呼び出す場合は、別の2つのメソッドが必要ですが、演算プログラムを使用する場合は、1つの変数でアクセスするのがずっと簡単だと感じます.
    さらに、演算プログラムの読み取り専用を実現するには、getメソッドを使用するだけです.
    class iOSCamperInformation {
        var gitHubIdAndAge: [String: Int]
        
        init(gitHubIdAndAge: [String: Int]) {
            self.gitHubIdAndAge = gitHubIdAndAge
        }
    	
        // 아래와 같이 하면 return 값이 iOSCamperInformation type이다 
       	var james: iOSCamperInformation { //연산 프로퍼티
            // 접근자
            get {
                return iOSCamperInformation(gitHubIdAndAge: ["James": 27])
            }
          
        var yagom: iOSCamperInformation {
            get {
              return iOSCamperInformation(gitHubIdAndAge: ["yagom": 22])
            }
          }
        }
    }
    // create camperMembers instance
    var camperMembers: IOSCamper = IOSCamper(gitHubIdAndAge: ["camper": 13])
    
    // GET james
    camperMembers = camperMembers.james
    
    print(camperMembers.gitHubIdAndAge) // ["James", 27]
    
    // SET이 설정되어 있지 않기 때문에 error!!
    camperMembers = camperMembers.gitHubIdAndAge
    TIL例文を書く前に、なぜ演算プログラムをメソッドで書かなければならないのかという疑問があったが、使ってみると本当に簡単だった.これからはよく使います.
    参考文献:
    SWIFTプログラミング第3版-野熊
    私の仮想財布の状況

    問題/厄介な問題


    野熊の本の例文とネット上の例文コードを見て、正直頭の中で勉強できないとは感じませんでした.だから今日は何回か演算プログラムを見ましたが、やはり混同しています.

    解決策


    その場合、私の想像力を使って自分のコードの例を作り、それに応じた文法を駆使して、私の頭ももっとはっきりして、ある程度私のものを吸収したような気がします.単纯にコピーして贴るよりも、他人の例をTILに书く方が、これからも自分なりのコード例をよく作って、本やネットで学んだ内容を自分から勉强したいと思います.