객체 개념 Ruby

10220 단어 ruby2.1RubyRails
Ruby를 사용하여 객체의 개념을 설명합니다.
대상이 무엇인지 엄격하게 설명하기 어렵다.
여기에 올리출판'처음의 루비'(Yugui 저)의 정의를 빌려 썼다.
대상
1. 신분 소유
2. 메시지 받기
3. 내부 상태 유지
대상이란 자신이 어떤 사람인지, 이름이 있는지, 소식을 받아들이고 어떤 처리를 하는지, 내부 상태를 가지는 것이다. 예를 들어
Integer는 크기, String은 길이, Aray는 저장된 상자가 있는 경우

"aa".object_id   #固有のオブジェクトのIDを持つ

=> 70243805533380

"aa".length  #Stringクラスに所属する「 "aa" 」は長さという状態を持ち、メッセージを受け取って処理をする。

=> 2
대상은 또한 분류 인용과 실례 변수를 가지고 있다.
클래스 참조는 개체가 속한 클래스입니다.

1.class

=> Fixnum

[1,2,5].class

=> Array

모든 대상은 어느 반에 속하고 사이가 좋다.
방법이 호칭되면 대상은 유형에 대한 질문을 하고 자신이 속한 유형에 방법이 있는지 탐색한다.
항상 오해를 받는 건 대상 자체가 방법이 있다는 거예요.

대상 자체는 방법이 없다!


예를 들어 "aaa"대상이 있으면 문자열의 길이를 알고 싶습니다.
"aaa".length

=> 3
문자열이 3을 반환합니다.이것은 내부 대상이 클래스에 문의하여 그 클래스의 실례를 찾는 방법이다.
어떤 반에 속하는 방법을 실례방법이라고 하는데, 이 방법은?이럴 때는 학급 방법을 가리키는 것일 수도 있고 특수한 방법을 가리키는 것일 수도 있다.이 실례적인 방법은 말할 때와 미묘한 차이가 있으니 주의해야 한다.하지만 이것은 습관의 문제일 수도 있다.

"aaa".class.instance_methods(false) 
 # 引数にfalseを指定したのは継承したクラスのインスタンスメソッドやmixinしたインスタンスメソッドを取り除くため(後で後述)

=> [:<=>, :==, :===, :eql?, :hash, :casecmp, :+, :*, :%, :[], :[]=, :insert, :length, :size, :bytesize, :empty?, :=~, :match, :succ, :succ!, :next, :next!, :upto, :index, :rindex, :replace, :clear, :chr, :getbyte, :setbyte, :byteslice, :scrub, :scrub!, :freeze, :to_i, :to_f, :to_s, :to_str, :inspect, :dump, :upcase, :downcase, :capitalize, :swapcase, :upcase,,,省略]

겸사겸사 "aaa"라고 말해 주세요.'length'를 쓸 때 정보를 받는 쪽의 대상을'수신기'라고 부른다.
루비는 처음부터 삽입식 클래스로 불리며 간단한 태그로 객체를 만들 수 있다.
이것은 소양이라고 한다. 예를 들면
 1
=> 1

1.class

=> Fixnum

 "aa"
=> "aa"

 "aa".class

=> String
이런 느낌은 쉽게 상대가 생길 수 있다.
본래 반을 세운 후에 그 중에서 대상을 만들어야 한다.

class Cat
  def nyaaa
    puts "nyaaa"
  end

  def tuna_kan
    puts "Nyaaaa~!!!"
  end
end

a = Cat.new

a.object_id
=> (なんらかの数字の列)
수신기에서 클래스 이름을 지정하고 new 방법을 호출하면 대상을 만들 수 있습니다.
참고로 수신기에서 클래스 이름을 지정하고 호출하는 방법을 클래스 방법이라고 합니다.
반명은 상수로 첫 글자 이상은 반드시 대문자로 시작해야 한다는 규정이 있다.
대상을 만드는 방법은 세 가지가 있는데 하나는 상수로 표시하는 간단한 방법이고, 하나는 변수에 저장하는 방법이며, 다른 하나는 클래스명으로 지정하는 방법이다.대상은 클래스 방법의'new'를 사용해 만들었지만 클래스 자체도 대상이 될 수 있고 모든 클래스는 클래스의 실례가 된다.
나는 여기서 실례라는 단어를 썼다.
실례는 어느 학급에 속하는 대상을 가리킨다
예제
a = Cat.new # => Catクラスのインスタンス
"aaa" # => Stringクラスのインスタンス
123 # => Fixnumクラスのインスタンス
[1,2,3] # => Arrayクラスのインスタンス
{aaa: 122} # => Hashクラスのインスタンス
:aaa # => Simbolクラスのインスタンス
그럼 이 반들은 어떤 실례일까요???

Cat.class
=> Class
String.class
=> Class
Fixnum.class
=> Class
Array.class
=> Class
Hash.class
=> Class
Simbol.class
=> Class
즉, 모든 학급이 클래스 클래스의 대상이다!!!

a = "aaa".class
=> String

 a.class #あるいは "aaa".class.class
=> Class

아래 그림을 보면서 그런 걸 이해한다.

모든 반이 클라스 클래스의 실례입니다!주문처럼 외우다.


객체에는 인스턴스 변수도 있습니다.
다음 예 참조

class Nisikasai
  def cat
    @cat = "cat"
  end
end

a = Nisikasai.new
a.cat
=> "cat"
a.instance_variables
=> [:@cat]

인스턴스 변수는 값을 대입할 때 처음 나타나며 각 객체마다 값이 다릅니다.

총결산


대상의 방법은 인용 대상의 유형 실례로 이주하고 실례 변수는 대상 자체로 이주한다.


계속,,,

좋은 웹페이지 즐겨찾기