# Copyright (c) 2023 Yuki Kimoto # MIT License class Point { # Interfaces interface Stringable; interface Cloneable; # Fields has x : rw protected int; has y : rw protected int; # Class methods static method new : Point ($x = 0 : int, $y = 0 : int) { my $self = new Point; $self->init($x, $y); return $self; } # Instance methods protected method init : Point ($x = 0 : int, $y = 0 : int) { $self->{x} = $x; $self->{y} = $y; } method clear : void () { $self->{x} = 0; $self->{y} = 0; } method clone : Point () { my $self_clone = Point->new($self->x, $self->y); return $self_clone; } method to_string : string () { my $x = $self->x; my $y = $self->y; my $string = "($x,$y)"; return $string; } }