慶日ゲーム学院多設備元バスプラットフォーム開発者育成課程202204152022年04月04日~2002/12/13

4318 ワード

慶日Metabus 20220413第2週第5日のレッスン内容.プログラミング-(プログラム化、構造化、オブジェクト向け)、抽象(符号化、簡略化、普遍化)、構造体、MineEscapeの構造体の抽象的実践
プログラミングタイプ
1.プログラムの
2.構造的
3.オブジェクト向け
抽象化
C言語で抽象コードに用いられる三剣客:配列、構造体、関数
抽象化:現実世界(現象)の簡略化/符号化/普遍化表現
なぜコードが抽象化される必要があるのか:最終コードは人が作成したものです.
コードの解釈を容易にするには
他の人が引き継いでメンテナンスしやすい必要があります.
他の人とコードを作成し、

  • ≪配列|Array|oem_src≫:複数の属性が同じデータを同じ名前と順序で連続して番号付けします.
    関連を表すことで抽象化する
    変数名[数値]

  • 構造:データ(データ型別)と実際に使用されているデータを組み合わせて抽象化

  • 関数:プロシージャ(コード)を特定の機能単位として抽象化する
  • 最悪の抽象化->抽象レベルを向上させるプロセス
    string a, b, c;//<- 最悪の抽象
    string a[3];//<- 上よりいい
    string name1, name2, name3;//<- あるいはこのような方法で.
    string studentName[3];//意図は上よりも明確なので、良い抽象です.
    構造体バー
  • 変数セット
  • ある変数がある種の概念に分類できる場合、
  • studentName[10], studentAge[10], studentKorScore[10] ...
  • 「学生」の「XXX」
  • 名、年齢、国語の点数、順位などを総称して「学生」構造と呼び、
  • を用いる

  • ≪構造体の場所の定義|Define Structure Location|oem_src≫:構造体で使用される関数の前に定義します.
    (関数の前(上)

  • 構造体定義の方法
    構造体変数名
    {
    構造体のサブ変数(メンバー変数);
    (上記の例によれば、名前、年齢、国語の点数、順位などはサブ変数)
    };
    構造体は、新しく作成したデータ型です.
  • 構造体に入ることができるサブ変数はどれらがありますか?
    int、bool、floatなどのすべての基本データ型が使用できます.
    string<-クラスも使用可能
    int a[8]と同じ配列や異なる構造体を使用することもできます
    また、
  • のカッコの末尾とセミコロンの間で学生の変数を事前に宣言することもできます.
  • ex)
    構造体変数名
    {
    メンバー変数
    }宣言する変数名;
  • 構造体宣言と初期化
    基本的に,構造体変数の概念はアレイ変数の概念と同じである.
    int a[3] = {50, 70, 80};
    構造体変数は、宣言と同時に初期化することもできます.以下に示します.
    score myScore = { 50, 80, 90 };
  • 以下は、コース全体で使用されるソースコードです.
    #include
    #include
    using namespace std;
    //ここで構造体を定義する
    struct score
    {
    int kor;
    int eng;
    int math;
    };
    struct student
    {
    string name;//カテゴリ
    int age;//基本データ型
    string homeTown;
    int pride;
    int monthlyScore[12];//整列
    score myScore;//こうぞうたい
    }seoyeon, jaehyuk;//カッコの末尾とセミコロンの間でstudent変数を事前に宣言することもできます.
    //name、age、korscore、rankのサブ変数を持つstudentという構造体を定義します.
    int main()
    {
    /*
    プログラミングベース(メモリ、CPU、ディスク)
    getch()
    こうぞうたい
    프로그래밍의 종류
    1. 절차적
    2. 구조적
    3. 객체지향적
    
    ### 추상화 ###
    C언어에서 코드를 추상화하는 데 사용되는 삼총사 : 배열, 구조체, 함수
    
    추상화란 : 실제 세계( 현상 )를 간략화 / 기호화/ 보편화 해서 표현한 것
    
    코드에서 추상화가 필요한 이유 : 결국 코드는 사람이 짜는 것이기 때문에,
    다른 사람이 코드를 해석하기 편리해야 하고
    다른 사람이 인수인계 받아서 유지보수하기 편리해야 하고
    다른 사람들과 함께 공동으로 코드를 만들기 편리해야 하고
    
    - 배열 : 속성이 동일한 여러 개의 데이터를 같은 이름과 순서를 지정한 연속된 번호로
    서로 연관되어 있음을 표시함으로써 추상화함
    변수명[숫자]
    
    - 구조체 : 데이터(자료형)을 실제로 쓰이는 데이터끼리 묶어서 추상화
    - 함수 : 프로세스(코드)를 특정 기능 단위로 묶어서 추상화
    
    최악의 추상화 -> 추상화 단계를 상승시키는 과정
    
    string a, b, c; // <- 최악의 추상화
    string a[3]; // <- 위의 것보다는 좀 낫다
    string name1, name2, name3; // <- 아니면 이런 식으로든지
    string studentName[3]; // 위의 것보다 의도가 명료하게 드러나기 때문에 좋은 추상화
    */
    
    /*
    구조체란
    - 변수를 모아 놓은 집합체
    - 특정 변수들이 무언가의 하위 개념으로 묶일 수 있을 때
    - studentName[10], studentAge[10], studentKorScore[10] ...
    - '학생'의 'XXX'
    - 이름, 나이, 국어점수, 석차 등등을 '학생'이라는 구조체로 묶어서 사용
    
    1. 구조체를 정의하는 위치 : 구조체가 사용되는 함수의 앞에 정의한다.
    ( 해당 함수의 바깥쪽 앞(위))
    
    2. 구조체 정의의 방법
    struct 구조체 변수명
    {
        구조체 안에 들어갈 하위 변수들 (멤버 변수);
        ( 위의 예시에 따르면 이름, 나이, 국어점수, 석차 등등이 하위 변수다)
    };
    구조체는 일종의 우리가 새롭게 만든 데이터형이다.
    
    구조체 안에 들어갈 수 있는 하위 변수는 무엇이 있을까
    int, bool, float 같은 기본 자료형들은 모두 사용 가능
    string <- 클래스도 사용 가능
    int a[8] 같은 배열이나 다른 구조체도 사용 가능
    
    * 중괄호의 끝과 세미콜론 사이에 student의 변수를 미리 선언해 줄 수도 있다.
    * ex)
        struct 구조체 변수명
        {
            멤버 변수;
        }선언할 변수명;
    
    3. 구조체 선언과 초기화
    기본적으로 구조체 변수의 개념은 배열 변수의 개념과 동일
    int a[3] = {50, 70, 80};
    구조체 변수도 다음과 같이 선언과 동시에 초기화할 수 있다.
    score myScore = { 50, 80, 90 };
    
    player.HP = player.HP - monster[n].dmg;
    <- 주석 없이 코드를 
    */
    student minseop; // 구조체 변수의 선언
    minseop.name = "심민섭"; // minseop의 name은 "심민섭"이다.
    minseop.age = 34; // minseop의 age는 34이다.
    minseop.homeTown = "인천";
    minseop.pride = 100;
    // 실습 : student 구조체를 사용해서 자기 자신의 정보를 입력해보자.
    student jinho; // 구조체 변수의 선언
    jinho.name = "이진호"; // minseop의 name은 "심민섭"이다.
    jinho.age = 25; // minseop의 age는 34이다.
    jinho.homeTown = "서울";
    jinho.pride = 70;
    cout << jinho.name << endl;
    seoyeon.name = "최서연";
    
    score myScore = { 50, 80, 90 }; // 배열을 초기화하듯 구조체 변수도 초기화할 수 있다.
    cout << myScore.kor << myScore.eng << myScore.math << endl;
    
    /* 과제 : 미궁탈출 게임의 업데이트
    사용할 수 있는 모든 요소에 구조체를 활용해서 소스 코드를 개선해 보세요.
    tile : 지형 정보를 넣고 ( 숲, 늪, 평지 )
    player : 피로도
    플레이어가 어느 지형에 있는지, 플레이어의 피로도가 얼마인지 ( 숲 -1, 늪 -3, 평지 0)
    표시되도록 수정해 봅시다.
    */
    }