Skip to content

Object Oriented System Enhancement Proposal. (REP-2) #49

@Almas-Ali

Description

@Almas-Ali

We are making Radon a true object oriented language like Python. We are willing to add almost all natures a OOP language supports.

  • class keyword support.
  • BuiltInClass functionality to add built in classes like we have BuiltInFunctions. We have mentioned this on Need BuiltInClass or Object for defining internal classes. #23
  • BuiltInInstance to handle classes objective behaviours.
  • Operators overloading systems to handle classes operational behaviours.

A basic sudo implementation of OOP in Radon will be like this.

class MyClass {
    fun __constructor__(this, any, others, args=null) {
        this.any = any
        this.others = 16*others
    }

    fun __add__(this, other) {
        return MyClass(
            this.any + other.any,
            this.others + other.others,
            this.args + other.args
        )
    }

    fun __destructor__(this) {
        pass
    }
}

Realistic OOP behaviors.

  • Abstraction support.
  • abstract keyword support.
abstract class AbstractClass() {
    fun some_method1(args1, args2, ...) # No implementations
    fun some_method2(args1, args2, ...) # No implementations
}

class NewClass(AbstractClass) {
    fun some_method1(args1, args2, ...) # Have to complete anyway
    {
        # implementations
    }
    fun some_method2(args1, args2, ...) # Have to complete anyway
    {
        # implementations
    }
}
  • Encapsulation support.
  • public, private, protected keyword support.
class ExampleClass {
    fun __constructor__(something) {
        this.something = something
    }

    # All methods by default public. explicitly definitions allowed.
    fun some_method() {
        return 123
    }
    public fun public_method() -> 0

    private fun private_method() {
        return 123
    }

    protected fun protected_method() {
        return 123
    }
}
  • Polymorphism support.
    Operator overloading is a part of polymorphism, which is already done.
    If anything missing, will be updated later.
  • Inheritance support.
  • Single Inheritance.
  • Multiple Inheritance.
  • Multilevel Inheritance.
  • Hierarchical Inheritance.
  • Hybrid Inheritance.
class ParentClass {
    fun __constructor__(something) {
        this.something = something
    }

    fun some_method() {
        return 123
    }
}

class ChildClass(ParentClass) {
    fun __constructor__(something_new) {
        this.something_new = something_new
        super().__constructor__(something)
    }
}

child = ChildClass()
child.some_method()  # will work!

We will update this issue as we change our plans.

Metadata

Metadata

Assignees

No one assigned

    Labels

    OOPObject Oriented ProgrammingenhancementNew feature or requestproposalRadon Enhancement Proposal (REP)syntaxLanguage Syntax

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions