您的位置:首页 > 移动开发 > Objective-C

【iOS开发之Objective-C】面向对象编程--间接

2015-06-26 20:57 519 查看
面向对象编程(Object-Oriented Programming)的首字母缩写为OOP,这是一种编程技术,最初是为编写模拟程序而开发的。OOP是一种编程架构,可构建由多个对象组成的软件。

在变成界有句老话,大意是这样的:“只要再多添加一层间接,计算机科学中就没有解决不了的问题”。

1.变量与间接

看下面的程序,输出数字1~5,他使用NSLog()语句来显示循环运行的值。

<span style="color:#009900;">//
//  main.m
//  OOP_1
//
//  Created by zhum on 15/6/23.
//  Copyright (c) 2015年 zhum. All rights reserved.
//</span>

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"The numbers from 1 to 5");
for(int i=1;i<=5;i++)
{
NSLog(@"%d\n",i);
}
}
return 0;
}
如果,我们要程序输出20那么,我们这里就需要修改两个部分了,NSLog(@"The number from 1 to5");和for(int i=1;i<=5;i++)把数字5换为20,是不是有点麻烦。如果在比较庞大的程序中,执行搜索和替换就麻烦多了,还要防止无关部分的代码也被替换了。如果我们增加变量count,那么修改起来就容易多了,我们也只需要查看变量count的值就知道程序执行了多少次。

<span style="color:#009900;">//
//  main.m
//  OOP_1
//
//  Created by zhum on 15/6/23.
//  Copyright (c) 2015年 zhum. All rights reserved.
//</span>

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
int count = 5;
NSLog(@"The numbers from 1 to %d",count);
for(int i=1;i<=count;i++)
{
NSLog(@"%d\n",i);
}
}
return 0;
}
上面两个程序最终输出的结果是一样的。但是当我们需要程序输出20个数时,第二个程序修改起来就容易多了,我们仅仅需要修改int count = 20;就可以了。

通过添加变量,代码变得比之前更加简洁,而且也更易于编辑了,尤其是在编程人员需要修改代码的时候。

2.使用文件的间接

文件是间接的一个示例。先来看如下的代码:

<span style="color:#009900;">//
//  main.m
//  OOP_2
//
//  Created by zhum on 15/6/23.
//  Copyright (c) 2015年 zhum. All rights reserved.
//</span>

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
const char *words[4] = {"aardvark","abadcus","alude","zygote"};
int wordCount = 4;
for(int i = 0; i < wordCount;i++)
{
NSLog(@"%s is %lu characters long",words[i],strlen(words[i]));
}
}
return 0;
}
使用for语句输出数组words里面的四个单词及其长度。如果我们需要修改数组words里面的内容,我们可以直接修改就可以了。但是这要的修改需要大量的工作,每次都需要修改.m文件里面的数组。如果程序在网站上面运行,还需要重新测试和部署程序才能升级至新的版本。构造此程序的另外一个办法是新建一个文件,把数组words里面的内容保存在文件中。这样以后修改就无需修改源文件。

<span style="color:#009900;">//
//  main.m
//  OOP_2
//
//  Created by zhum on 15/6/23.
//  Copyright (c) 2015年 zhum. All rights reserved.
//</span>

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
FILE *wordFile = fopen("/tmp/words.txt", "r");
char word[100];
while(fgets(word, 100, wordFile))
{
word[strlen(word)-1] = '\0';
NSLog(@"%s is %lu characters long",word,strlen(word));
}
fclose(wordFile);
}
return 0;
}


words.txt文件中的内容:

aardvark

abadcus

alude

zygote

首先,fopen()函数打开文件words.txt文件以便读取内容,然后fget()从文件中读取一行文本并将其放入数组word中。fget()调用会保留每行之间用来断行的换行符,但我们不需要它,如果留下换行符就会被自动计为单词中的一个字符。为了解决这个问题我们将换行符替换为\0,这表示字符串的结束。最后我们使用NSLog()输出单词及其长度。输出结果和上面的相同。

注意:

fopen()使用的路劲名称/tmp/words.txt。/tmp是Unix临时目录,这意味着每次计算机重启都会清空。在真是的程序中,可以将文件放在一个可以永久保存的位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: