圧倒的備忘録

忘却は罪である。

【PHP入門】クラスの継承について

extends

クラスのメンバを他のクラスで継承するメソッド

extendsの使い方

class クラス名 extends 継承元クラス名 {
    処理
}

注意点

親クラスでprivate修飾子による権限が指定されている場合は、そのメンバを引き継ぐことはできない。

サンプル

<?php

class ParentClass{
 
    public function workItem1($str){
        echo $str.'ParentClass <br>';
    }
 
    public function workItem2(){
        echo 'Processing of workItem2 of ParentClass. <br>';
    }
 
}
 
class ChildClass extends ParentClass{
 
    public function workItem1($str){
        echo $str.'ChildClass <br>';
    }
 
}
 
//インスタンスを生成
$parent = new ParentClass();
$child = new ChildClass();
 
//メソッドの呼出し
$parent->workItem1('Processing of ');
$child->workItem1('Processing of ');
 
$parent->workItem2();
$child->workItem2();
?>

実行結果

Processing of ParentClass 
Processing of ChildClass 
Processing of workItem2 of ParentClass. 
Processing of workItem2 of ParentClass. 

【Java入門】

Java言語は、コンパイラ、インタプリタという2つのソフトウェアを使って、機械語に翻訳されます。

コンパイラとは

人間が分かる言葉で書かれたソースコードをコンピュータが分かる言葉に変換してくれるプログラムのことです。

インタプリタとは

コンピュータが分かる言葉を解釈しながら、実行することです。

問題:Javaで「Hello,World」と表示させよう!

答え:

class Sample1 {
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

実行:

$ javac Sample1.java
$ java Sample1

public static void main(String args)とは?

publicとは

どのクラスからもアクセスできることを意味します。それに対し、privateは同一のクラス内でしかアクセスできないことを意味します。

staticとは

インスタンス化しなくてもメソッドにアクセスできることを意味します。

mainとは

メソッドを指します。Javaコマンドの実行時に呼び出されます。

void

戻り値の型を意味します。

(String args)

引数を意味します。

【Ruby入門】インスタンスからクラスの変数を取得・変更する方法

Rubyは以下の図のようにインスタンスからクラスにアクセスできない仕様になってます。 f:id:istn:20180824170755p:plain

# -*- coding: utf-8 -*-
require 'date'
# Musicクラスをつくる
    class Music
        # Musicクラスのインスタンスを初期化する
        def initialize(title)
            @title = title
        end
    end
# Musicクラスのインスタンスを作成する
music = Music.new "戦場のメリー・クリスマス"
puts "曲名:" + music.title

一件、このコードは問題ないように見えますが、@titleは「クラスインスタンス変数」と呼ばれる変数として扱われるため、下記のエラーが生じアクセスすることができないのです。 実行結果:

 undefined method `title' for #<Music:0x0000000003f91c28> (NoMethodError)

では、インスタンスからクラスの変数を取得・変更するにはどのようにすればよいでしょうか?

f:id:istn:20180824172449p:plain それには、ゲッターを使います。

ゲッター

オブジェクトの属性を取得する操作です。以下のように、ゲッターを使うとインスタンスから変数@titleを取得することが可能となります。

# -*- coding: utf-8 -*-
# Musicクラスをつくる
    class Music
        # Musicクラスのインスタンスを初期化する
        def initialize(title)
            @title = title
        end
        # title属性のゲッターメソッド
        def title
            @title
        end
    end
# Musicクラスのインスタンスを作成する
music = Music.new "戦場のメリー・クリスマス"
puts "曲名:" + music.title

実行結果:

曲名:戦場のメリー・クリスマス

ゲッターにより、インスタンスから変数を取得することができるようになりました。では、インスタンスの値を変更するにはどのようにしたらよいでしょうか?セッターを使います。

# -*- coding: utf-8 -*-
# Musicクラスをつくる
    class Music
        # Musicクラスのインスタンスを初期化する
        def initialize(title)
            @title = title
        end
        # title属性のゲッターメソッド
        def title
            @title
        end
  # title属性のセッターメソッド
        def title=(value)
            @title = value
        end
    end
# Musicクラスのインスタンスを作成する
music = Music.new "戦場のメリー・クリスマス"
# セッターを使ってtitileの値を変更する
music.title = "ライディーン"
puts "曲名:" + music.title

ゲッターとセッターを使うことにより、オブジェクトの値を取得・設定することが可能となりました。しかし、多数のインスタンス変数の全てについて、ゲッター・セッターメソッドを用いるのはかなり煩雑です。そこで、アクセサを使います。

アクセサとは

オブジェクトの属性を取得、設定する操作のことです。ゲッターとセッターを併せ持った操作です。

# -*- coding: utf-8 -*-
# Musicクラスをつくる
    class Music
        # Musicクラスのインスタンスを初期化する
        def initialize(title,composer)
            @title = title
            @composer = composer
        end
        # title属性、age属性のアクセサ
        attr_accessor :title, :composer
        # Musicクラスのインスタンスの文字列表現を返す
        def to_s
            "#@title, #@composer"
        end
    end
# Musicクラスのインスタンスを作成する
music = Music.new '戦場のメリークリスマス', '坂本龍一'
# アクセサを使ってtitileの値を変更する
music.title = "ライディーン"
puts "曲名:" + music.title + "\n作曲者:" + music.composer

これにより、ゲッターとセッターを一つ一つ定義することなく、オブジェクトの値を取得・更新することが可能です。とても、便利な操作ですので、この際に抑えておきましょう!