OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

odata message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: [OASIS Issue Tracker] Commented: (ODATA-364) Remove restriction that a property MUST NOT have the same name as its containing type

    [ http://tools.oasis-open.org/issues/browse/ODATA-364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=33327#action_33327 ] 

Stefan Drees commented on ODATA-364:

Maybe I did not understand the possible translation of Evan's requested canonical naming scenario to a programming lanuage right. So, please excuse any style or otherwise - deficits and follow me on my journey of adhoc mapping the scenario :

The following test-code in python:

#! env python
"""Don't tell anyone Stefan wrote this. ;-) """
class Employee(object):
    """ Anyone being employed. """

    def __init__(self, key, man = None):
        self.key = key
        self.manager = man

    def join(self, man):
        """Join a managed relationship. """
        self.manager = man

    def leave(self):
        """Leave a managed relationship. """
        self.manager = None
    def Manager(self):
        """Here we have the same name as the derived type. 
        And PEP8 states the name should match [a-z_][a-z0-9_]{2,30}$ ..."""
        return str(self.manager)

class Manager(Employee):
    """ A manager is expected to be employed. """
    def __init__(self, key):
        super(Manager, self).__init__(key, key)
        self.subordinates = []
    def take(self, key):
        """Take responsibility for another employee as identified by key. """
        if key not in self.subordinates:
    def release(self, key):
        """Release responsibility for employye as identified by key. """
        if key in self.subordinates:

if __name__ == "__main__":

    manager = Manager(1)
    employee = Employee(42, manager.key)
    print "Manager(1) has key = " + str(manager.key)
    print "Manager(1) has subordinates = ",
    print repr(manager.subordinates)
    print "Employee(42) has member property manager = ", 
    print str(employee.manager)
    print "Employee(42)'s member function Manager() yields: ",
    print employee.Manager()
    print "Manager(1) released Employee(42), thus subordinates = ",
    print repr(manager.subordinates)
    print "Employee(42)'s member function Manager() now yields: ",
    print employee.Manager()

Yields when executed:

Manager(1) has key = 1
Manager(1) has subordinates =  [42]
Employee(42) has member property manager =  1
Employee(42)'s member function Manager() yields:  1
Manager(1) released Employee(42), thus subordinates =  []
Employee(42)'s member function Manager() now yields:  None

So this works and the method Employee.Manager() would map to the navigational property as noted by Evan. Right?

Is it really impossible in C# to define a class Employee where a method has the same name (Manager) as a class Manager derived from that class?

> Remove restriction that a property MUST NOT have the same name as its containing type
> -------------------------------------------------------------------------------------
>                 Key: ODATA-364
>                 URL: http://tools.oasis-open.org/issues/browse/ODATA-364
>             Project: OASIS Open Data Protocol (OData) TC
>          Issue Type: Improvement
>          Components: OData CSDL
>    Affects Versions: V4.0_CSD01
>         Environment: [Proposed]
>            Reporter: Ralf Handl
>             Fix For: V4.0_CSD02
> Chapters 8 and 9 state that 
> - Properties MUST NOT have the same name as the declaring entity type.
> - Properties MUST NOT have the same name as the declaring complex type.
> This sometimes prevents using natural names for properties, e.g. 
> - EntityType Employee
> - EntityType Manager inherits from Employee
> - EntityType Employee has NavigationProperty that leads to the manager
> The natural name for the navigation property is Manager, but prevented by the above rule. So the navigation property has to be named "TheManager" or "manager" (using different case)

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators: http://tools.oasis-open.org/issues/secure/Administrators.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]