【Python】オブジェクト指向を少しだけ/クラスを自作するプログラミング。

オブジェク指向を少しだけ

今回は「オブジェクト指向」を体感することがテーマ。

オブジェクト指向、オブジェクト指向・・・・。プログラミングを勉強していると、やたらと聞く言葉だけど、一体何?・・・という人も多いのではないでしょうか。

で、調べて見ると「オブジェクト指向の三大要素」とは。

1.カプセル化
2.継承
3.多態性

・・・・・。

う~む。

要するに、クラスっていうものによって、プログラム内での「役割り分担」をして、その役割を「受け継ぐ」新しいクラスを作ることもできたりして・・・、結果、利用する側は「同じ命令を出すだけ」でクラス毎イイ感じに仕事をこなしてくれる。

こんな感じの便利なプログラミングの手法なんだけど・・・。

何となくわかるんだけど、でもどこかモヤモヤが残るって感じの人も多いんじゃないでしょうか。

重要なのは用語じゃなくて

大事なことは・・・。

プログラミングを効率よく、なるべく楽に進めるための一つの「流派」みたいなものがオブジェクト指向であるということ。

言葉の意味とか、別に重要じゃない。

この動画を見て、あぁ、これは確かに楽だぞ!ということを感じてもらえたら、うれしいなぁ(≧◇≦)

オブジェクト指向を感じる動画。
https://youtu.be/GmVC0h79pIo

以下のコードは参考資料として。

########################################
#####   オブジェクト指向を少しだけ   #####
#####    ~ クラスを自作する ~      #####
########################################

import tkinter as tk

class Ball:
    def __init__(self, x, y, size, movex, movey, color):
        self.x = x
        self.y = y
        self.size = size
        self.movex = movex
        self.movey = movey
        self.color = color
    
    def draw(self):
        can.create_oval(self.x, self.y, self.x+self.size, self.y+self.size, fill=self.color)
    
    def move(self):
        if key==False :
            self.x += self.movex
            self.y += self.movey
        if self.x<=0 or self.x>=500-self.size :
            self.movex *= -1
        if self.y<=0 or self.y>=500-self.size :
            self.movey *= -1

class Rectangle(Ball):
    def draw(self):
        can.create_rectangle(self.x, self.y, self.x+self.size, self.y+self.size, fill=self.color)

win = tk.Tk()
can = tk.Canvas(win, width=500, height=500, bg="white")
can.pack()

key = False
def keyPress(event):
    global key
    key = True

def keyRelease(event):
    global key
    key = False

win.bind("<Any-KeyPress>", keyPress)
win.bind("<Any-KeyRelease>", keyRelease)

ball = Ball(50, 50, 20, 5, -5, "red")
ball2 = Ball(250, 300, 50, -10, 8, "green")
rectangle = Rectangle(400, 300, 80, -20, -50, "blue")

def drawLoop():
    can.delete("all")
    ball.draw()
    ball.move()
    ball2.draw()
    ball2.move()
    rectangle.draw()
    rectangle.move()
    win.after(30, drawLoop)

drawLoop()

win.mainloop()