Это может быть сложный вопрос.По мере того, как вы становитесь более опытным, вы будете чувствовать себя более комфортно с более продвинутыми концепциями.Проблема, над которой вы работаете, на самом деле довольно сложна и делает ее отличным инструментом обучения.
Ваша самая большая проблема заключается в том, что ваше текущее решение не использует какую-либо объектную ориентацию, что может усложнить его обслуживание и / илирасширяться в будущем.
В конечном счете, вопрос об оптимальной структуре кода может иметь много ответов, и вы можете не знать, что лучше, пока не будете дальше, пока вы не добавите больше функций в свою программу.
Я перерисовал вашу программу, что, по моему мнению, является прочной конечной структурой игры (в отличие от стрельбы для более кроткого промежуточного шага).К сожалению, это может быть немного скачком, когда только начинаешь.
В этом решении есть две продвинутые концепции: объектно-ориентированное программирование и селекторы.Селекторы - это невероятно мощный инструмент, который позволяет вам передавать действительные инструкции по вашей программе, используя переменные.В вашем случае вы можете хранить операторы if в ваших объектах диагностики.
В любом случае, пожалуйста, не стесняйтесь задавать любые вопросы по следующим вопросам:
Vitals.h
#import <Foundation/Foundation.h>
@interface Vitals : NSObject {
float _pH;
int _paCO2;
int _hCO3;
}
- (id) initWithPH:(float)pH paCO2:(int)paCO2 hCO3:(int)hCO3;
- (float) pH;
- (int) paCO2;
- (int) hCO3;
@end
Vitals.m
#import "Vitals.h"
@implementation Vitals
- (id) initWithPH:(float)pH paCO2:(int)paCO2 hCO3:(int)hCO3 {
if (self = [super init]) {
_pH = pH;
_paCO2 = paCO2;
_hCO3 = hCO3;
}
return self;
}
- (float) pH {return _pH;}
- (int) paCO2 {return _paCO2;}
- (int) hCO3 {return _hCO3;}
@end
Diagnosis.h
#import <Foundation/Foundation.h>
@class Vitals;
@interface Diagnosis : NSObject {
NSString* _name;
id _delegate;
SEL _test;
}
- (id) initWithName:(NSString*)name delegate:(id)delegate test:(SEL)test;
- (NSString*) name;
- (BOOL) test:(Vitals*)vitals;
@end
Diagnosis.m
#import "Diagnosis.h"
@implementation Diagnosis
- (id) initWithName:(NSString*)name delegate:(id)delegate test:(SEL)test {
if (self = [super init]) {
_name = [name retain];
_delegate = delegate;
_test = test;
}
return self;
}
- (void) dealloc {
[_name release];
[super dealloc];
}
- (NSString*) name {return _name;}
- (BOOL) test:(Vitals*)vitals {
return [(NSNumber*)[_delegate performSelector:_test withObject:vitals] boolValue];
}
@end
Doctor.h
#import <Foundation/Foundation.h>
@class Vitals;
@class Diagnosis;
@interface Doctor : NSObject {
NSMutableArray* _diagnoses;
}
- (void) learnDiagnosis:(Diagnosis*)diagnosis;
- (Diagnosis*) diagnose:(Vitals*)vitals;
@end
Доктор.м
#import "Diagnosis.h"
#import "Doctor.h"
@implementation Doctor
- (id) init {
if (self = [super init]) {
_diagnoses = [[NSMutableArray alloc] init];
}
return self;
}
- (void) dealloc {
[_diagnoses release];
[super dealloc];
}
- (void) learnDiagnosis:(Diagnosis*)diagnosis {
[_diagnoses addObject:diagnosis];
}
- (Diagnosis*) diagnose:(Vitals*)vitals {
for (Diagnosis* diagnosis in _diagnoses) {
if ([diagnosis test:vitals])
return diagnosis;
}
return 0;
}
@end
Дифференциал.ч
#import <Foundation/Foundation.h>
@interface Differential : NSObject {}
- (void) teach:(Doctor*)doctor;
@end
Дифференциал.м
#import "Vitals.h"
#import "Diagnosis.h"
#import "Doctor.h"
#import "Differential.h"
@implementation Differential
- (NSNumber*) acuteRespiratoryAcidosis:(Vitals*)vitals {
return [NSNumber numberWithBool:(([vitals pH] < 7.35) && ([vitals paCO2] > 45) && ([vitals hCO3] >=22 && [vitals hCO3] <=26))];
}
- (NSNumber*) partiallyCompensatedResporatoryAcidosis:(Vitals*)vitals {
return [NSNumber numberWithBool:(([vitals pH] < 7.35) && ([vitals paCO2] > 45) && ([vitals hCO3] >26))];
}
- (void) teach:(Doctor*)doctor {
Diagnosis* diagnosis;
diagnosis = [[Diagnosis alloc] initWithName:@"Acute Respiratory Acidosis" delegate:self test:@selector(acuteRespiratoryAcidosis:)];
[doctor learnDiagnosis:diagnosis];
[diagnosis release];
diagnosis = [[Diagnosis alloc] initWithName:@"Partially Compensated Respiratory Acidosis" delegate:self test:@selector(partiallyCompensatedResporatoryAcidosis:)];
[doctor learnDiagnosis:diagnosis];
[diagnosis release];
}
@end
Песочница.ч
#import <Foundation/Foundation.h>
#import "Vitals.h"
#import "Diagnosis.h"
#import "Doctor.h"
#import "Differential.h"
void run () {
float pH=7.2;
int paCO2=47;
int hCO3=25;
Doctor* doctor = [[Doctor alloc] init];
Differential* differential = [[Differential alloc] init];
[differential teach:doctor];
Vitals* vitals = [[Vitals alloc] initWithPH:pH paCO2:paCO2 hCO3:hCO3];
Diagnosis* diagnosis = [doctor diagnose:vitals];
NSLog(@"%@",[diagnosis name]);
[vitals release];
[differential release];
[doctor release];
}