Я думаю, вы неправильно поняли, для чего предназначены @property и @synthesize. Это удобные способы определения методов доступа. то есть. то, что у вас есть, эквивалентно: -
- (NSString *)name;
- (void)setName:(NSString *)value;
myEmp.name = @"John"
является синтаксическим сахаром для [myEmp setName:@"John"]
Таким образом, вы явно создали дополнительные общедоступные методы доступа, а затем использовали их. Здесь не нарушена инкапсуляция.