はじめに
皆さん、初めまして。名無しのQです。
現在、プログラマー目指して勉強中のものです。
今回から学習記録をつけたいと思ったので、学習した内容を記事に載せようかなと思います。
今回はJavaScriptで円クラスを継承した四角形クラス、三角形クラス、円クラスから各図形の面積を求めてみました。
以下はコードになります。
Shape.js
//図形クラスを定義する
class Shape{
//コンストラクタ
constructor(name){
this.name = name;//図形の名前
}
}
//図形クラスを継承した四角形クラスを定義する
class Square extends Shape{
constructor(width, height) {
// 親(Shape)のコンストラクタを呼び出す
super("四角形");//名前を継承
this.width = width; // 底辺
this.height = height; // 高さ
}
// 三角形特有の「面積(Area)」を計算するメソッド
getArea(){
return this.width * this.height
}
//正方形と長方形に分類して「種類(type)」を表示するためのメソッド
type(){
//横と縦の大きさを比較して分類する
if(this.width === this.height){
return "正方形";
}
else{
return "長方形";
}
}
}
//図形クラスを継承した三角形クラスを定義する
class Triangle extends Shape{
constructor(base, height) {
// 親(Shape)のコンストラクタを呼び出す
super("三角形");//名前を継承
this.base = base; // 底辺
this.height = height; // 高さ
}
// 三角形特有の「面積(Area)」を計算するメソッド
getArea() {
return (this.base * this.height) / 2;
}
}
//図形クラスを継承した円クラスを定義する
class Circle extends Shape{
constructor(radius){
super("円");
this.radius = radius; // 半径
}
// 円特有の「面積(Area)」を計算するメソッド
getArea(){
return this.radius * this.radius * Math.PI;
}
}
//横が2,縦が5の四角形のオブジェクトを生成する
const squ1 = new Square(2,5);
//出力結果:横が2,縦が5の長方形の面積は10です
console.log(`横が${squ1.width},縦が${squ1.height}の${squ1.type()}の面積は${squ1.getArea()}です`)
//1辺の長さが4の正三角形のオブジェクトを生成する
const tri1 = new Triangle(4,4);
//出力結果:底辺が4,高さが4の三角形の面積は8です
console.log(`底辺が${tri1.base},高さが${tri1.height}の${tri1.name}の面積は${tri1.getArea()}です`);
//半径が5の円のオブジェクトを生成する
const cir1= new Circle(5);
//出力結果:半径5の円の面積は78.53981633974483です
console.log(`半径${cir1.radius}の${cir1.name}の面積は${cir1.getArea()}です`);
オブジェクト指向とは
考え方なのかなと思います。クラスという設計図を基に実体(インスタンス・オブジェクト)を生成するといった感じです。
インスタンスとオブジェクトについてですが、個人的にはほぼ同じものとして扱っていいような気がします。
オブジェクト指向を使わなくてもプログラムが書けない訳ではないと思いますが、
オブジェクト指向を活用したほうが、コードが読みやすくなったり修正しやすくなったりと
利点が多いです。
今回のコードの場合は図形を作るために必要な設計図Shapeを継承し、
四角形、三角形、円を作るために必要な設計図Square,Triangle,Circleを作った感じです。
squ1,tri1,cir1は各図形の設計図から作られたインスタンス及びオブジェクトになります。
最後に
これからもスキルアップに向けて精進していきたいと思います。ありがとうございました。