見出し画像

『継承』の例題を考えたらモヤモヤしてしまった話 #タメにならない話

こんにちは、週明けの授業のネタを今更仕込んでいる残念な先生もどきです。

無駄な前振り

今年度から参加しているプログラミング系科目にて、Javaにおける継承の基本的な考え方・コードの書き換えを行うサンプルを準備するためにあれこれあがいているところです、お昼に昨日のドライカレーの残りを食べた後、お酒+カラムーチョの残りでブーストしてやろうかという所です。晩ご飯のメインの仕込みは完了してます(つけ込み時間が必要なため)。

で、継承です。Javaを含めてオブジェクト指向をと言い出すと必ずと言って良いほど登場するネタです。良くあるのがとある学科に属する学生をクラスで模倣する際に、別学科の学生を作ろうとしたので、個人情報部分を切り出すというアレです。他に車の種類と基本の部品といったものもあるでしょう。

よくあるクラスコピー

こういうコピーではなく、学科を跨いで使うような属性は切り出すことで、再利用性の向上か云々を語るのが継承ですよね。

継承による共通化の例

さてこの場合、extendsで継承するか基本情報のクラスのインスタンスを各学生が保有するかでまた変わってきますよね。なんとなく後者の方が情報の囲い込みができる(やり方次第では学科学生インスタンスが個人情報にそのままアクセスできてしまう可能性を低くする)のでいいかと思うのですが、継承の話をやりたいのでしかたない。

問題は性別の扱い(本題)

さてこの切り出す前後で保有してる個人情報である性別をこのご時世どう扱うかということがもやもやなのです。これが一昔?前ならこんな感じであっさりできました。 


public enum Sexspec {
		Male,
		Female
};
// ...
public Sexspec Gender;

ところが現在は性別の扱いがけっこう難儀です。世の中のエンジニア達の苦労がなにげにしのばれます。

* 生物学的な性: Sex
* 文化的・社会的な性: Gender
(参照: 内閣府: 第70回 性差:ジェンダーとセックスの違い)

生物学的なものというと、極論すれば男性ホルモン・女性ホルモンの量とかXY染色体(性染色体)の問題とかで、確率的に高くありませんが、性別モザイクというものもありますが、どこかで親がとりあえず登録し、将来的にどちらになるかはまたその時役所に、という話になると思います。どうなんでしょう、ずっとモザイクのままというのは可能なのでしょうか。
(たとえば夫がモザイク、妻が女性という婚姻届、市町村の役所により男性・男性の提出を受け付けるなど若干扱い変わるのはわかってますが)。

文化的・社会的なものは、生物学的なものとは別に本人がどう自認してるかという話になり、Sex/Genderの食い違いが一般にいうところの性同一性障害として認知されるようになってるんだと考えてます。さて学籍簿っていったいどっちの性を記載してるんでしょうね。

ということで、文化的・社会的な性別ということで考え出すと、enumがこんな感じでしょうかね。

	public enum Genderspec {
		Male,
		Female,
		Others
	};

え、Othersでひとまとめにして良いのか? こうなると、本人の性自認を文字列で記載させておくとかになりますかね。これもまた難しい話になってしまいます。Optional使ってこんな感じ?

	public enum Genderspec {
		Male,
		Female,
		Others
	};
	public Genderspec Gender;
	public String Identity = null;
	
	public Optional<String> getGenderIdentity() {
		return Optional.ofNullable(Identity);
	}

さて、こんなことを授業でやり出そうものなら、これだけで1時間では済まない話になってしまいますよね。

ごめんなさい、世の中の実装がバータリーになるのは、こういう所で発生していくわけですよ、学生の皆さん。

授業では『この辺のことを本気で考え始めると大変なことになるので、男性・女性だけで考えさせてね』ということにして押し切る予定です。この記事見たうちの学生の方々がもしいたら、そっとしておいてくださいorz


この記事が気に入ったらサポートをしてみませんか?